Извлеките значения из списка и сохраните его на существующий лист Excel в c # - PullRequest
0 голосов
/ 03 июля 2019

У меня есть лист Excel, в котором есть заголовки.Я получаю данные с моего сервера и помещаю их в свою таблицу данных WPF, и она выглядит следующим образом:

enter image description here

При нажатии кнопки мне нужнопоместите значения из моего списка на конкретный лист в моей существующей книге Excel.На самом деле я могу получить значения из таблицы данных WINFORM следующим образом:

var xlApp = new Excel.Application();
Excel.Worksheet sheet = new Excel.Worksheet();
xlApp.Visible = true;
var path = @"D:\Reports\Tag_History.xlsx";
sheet = xlApp.Application.Workbooks.Open(path).Worksheets["Summary"];

var rowCount = dataGrid.Items.Count;
var rowColumn = dataGrid.Columns.Count;

for (int i = 0; i < rowCount - 1; i++)
{
    for (int j = 0; j < 7; j++)
    {
        if (dataGrid[j, i].ValueType == typeof(string))
        {
            xlsht.Cells[i + 2, j + 1] = "'" + dataGrid[j, i].Value.ToString();
        }
        else
        {
            xlsht.Cells[i + 2, j + 1] = dataGrid[j, i].Value.ToString();
        }
    }
}

, но, поскольку я пытаюсь сделать это в WPF, этот код больше не работает.Это происходит путем передачи данных dataGrid в существующий файл Excel.Поскольку я считаю, что перенос списка в существующий файл Excel лучше, я должен попробовать это.Это то, что я до сих пор:

var xlApp = new Excel.Application();
Excel.Worksheet sheet = new Excel.Worksheet();
xlApp.Visible = true;
var path = @"D:\Reports\Tag_History.xlsx";
sheet = xlApp.Application.Workbooks.Open(path).Worksheets["Summary"];

var range = sheet.Range["A2", "A2"];
foreach (var item in summaryList)
{
    range.Value2 = item.TagNumber;
}

Этот код работает, но он обновляет только одну ячейку файла Excel.

enter image description here

Подскажите, пожалуйста, как это сделать?Спасибо.

1 Ответ

0 голосов
/ 03 июля 2019

Установить Microsoft.Office.Interop.Excel Пакет Nuget в вашем приложении. Щелкните правой кнопкой мыши по проекту -> «Ссылки» и выберите «Управление пакетами NuGet ...» , а затем просто выполните поиск в Excel. В противном случае выберите Инструменты -> Диспетчер пакетов Nuget -> Консоль диспетчера пакетов ->, а затем установите Nuget Excel (https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/).

Свяжите элементы в DataGrid, а затем экспортируйте данные в Excel, как показано ниже,

private void btnExport_Click(object sender, RoutedEventArgs e)
    {
        Microsoft.Office.Interop.Excel.Application excel = null;
        Microsoft.Office.Interop.Excel.Workbook wb = null;
        object missing = Type.Missing;
        Microsoft.Office.Interop.Excel.Worksheet ws = null;
        Microsoft.Office.Interop.Excel.Range rng = null;

        // collection of DataGrid Items
        var dtExcelDataTable = ExcelTimeReport(txtFrmDte.Text, txtToDte.Text, strCondition);

        excel = new Microsoft.Office.Interop.Excel.Application();
        wb = excel.Workbooks.Add();
        ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
        ws.Columns.AutoFit();
        ws.Columns.EntireColumn.ColumnWidth = 25;

        // Header row
        for (int Idx = 0; Idx < dtExcelDataTable.Columns.Count; Idx++)
        {
            ws.Range["A1"].Offset[0, Idx].Value = dtExcelDataTable.Columns[Idx].ColumnName;
        }

        // Data Rows
        for (int Idx = 0; Idx < dtExcelDataTable.Rows.Count; Idx++)
        {
            ws.Range["A2"].Offset[Idx].Resize[1, dtExcelDataTable.Columns.Count].Value = dtExcelDataTable.Rows[Idx].ItemArray;
        }

        excel.Visible = true;
        wb.Activate();
        wb.SaveCopyAs("excel file location");
        wb.Saved = true;            
        excel.Quit();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...