Установить значение ячейки с помощью Excel взаимодействия - PullRequest
16 голосов
/ 27 января 2011

Хорошо, поэтому я пытаюсь установить значение ячейки с помощью библиотеки взаимодействия Excel. Я могу сделать это со следующим:

sheet.Cells[row, col] = value;

но это ужасно медленно, сколько я устанавливаю. Поэтому я пытаюсь пойти по этому пути:

Range excelRange = sheet.UsedRange;
excelRange.Cells.set_Item(row, col, value);

Код выполняется, но данные не помещаются в ячейку. Любые предложения о том, что мне не хватает? Спасибо!

Ответы [ 4 ]

22 голосов
/ 27 января 2011

Ваш первый метод должен работать нормально для любого разумного (и большого количества необоснованного) количества ячеек, если вы отключили обновление экрана (Application.ScreenUpdating = false). Статья базы знаний , описывающая, как устанавливать ячейки с использованием C #, также по строке и столбцу.

17 голосов
/ 27 января 2011

Вы пытались установить все значения одновременно, вместо того, чтобы перебирать массив и устанавливать по одной ячейке за раз?Таким образом, вам нужно будет передавать данные через границу COM только один раз, а не один раз на ячейку.

Excel очень гибок в этом отношении.Попробуйте следующее:

int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Range rng = excelApp.get_Range("A1", "J1");
rng.Value = intArray; 

Это должно быть быстрее, чем итерация по каждой ячейке, которую вы хотите установить.

Кроме этого, отключите ScreenUpdated, как предлагает Энди, а также подумайтеустановка расчета вручную, пока вы не закончили процесс копирования.

0 голосов
/ 09 марта 2017

Простое решение, но здесь вам нужно будет установить пакет Microsoft.Office.Interop.Excel, написав в консоли nuget

Установочный пакет Microsoft.Office.Interop.Excel

   //test excel file
   Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

        Workbook workbook = excel.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "/TrainedFaces/AttendanceLog.xlsx", ReadOnly: false, Editable: true);
        Worksheet worksheet = workbook.Worksheets.Item[1] as Worksheet;
        if (worksheet == null)
            return;

        var abc = worksheet.Cells[2, 1].Value;
        Range row1 = worksheet.Rows.Cells[1, 1];
        Range row2 = worksheet.Rows.Cells[2, 1];

        row1.Value = "Test100";
        row2.Value = "Test200";


        excel.Application.ActiveWorkbook.Save();
        excel.Application.Quit();
        excel.Quit();
0 голосов
/ 13 августа 2014

Пожалуйста, попробуйте

[excelWorksheet].Cells[1, 1] = "[String you want]";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...