Установить значение ячейки с помощью Excel interop
Хорошо, поэтому я пытаюсь установить значение ячейки с помощью библиотеки interc interc. Я могу сделать это со следующим:
sheet.Cells[row, col] = value;
но это ужасно медленно, насколько я настроен. Поэтому я пытаюсь пройти этот маршрут:
Range excelRange = sheet.UsedRange;
excelRange.Cells.set_Item(row, col, value);
Выполняется код, но данные не помещаются в ячейку. Любые предложения о том, что мне не хватает? Спасибо!
Ответы
Ответ 1
Ваш первый метод должен работать нормально для любого разумного (и много необоснованного) количества ячеек при условии, что вы отключили обновление экрана (Application.ScreenUpdating = false
). Статья базы знаний, в которой описывается, как устанавливать ячейки с помощью доступа к С# по строке и столбцу.
Ответ 2
Вы пытались установить все значения сразу, вместо того, чтобы повторять через ваш массив и устанавливать по одной ячейке за раз? Таким образом, вы должны передавать данные только через границу 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, как предлагает Энди, а также рассмотрите настройку вычисления вручную до тех пор, пока вы не закончите процесс копирования.
Ответ 3
Простое решение, но здесь вам нужно будет установить пакет 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();
Ответ 4
Пожалуйста, попробуйте
[excelWorksheet].Cells[1, 1] = "[String you want]";