У меня есть следующий код в c#, который мне удалось написать с различными идеями с этого сайта и других. (с помощью Microsoft Excel Interop)
public static void update_cells(string filePath, string whichSheet, List<List<object>> cellList)
{
Debug.WriteLine($"start updatecells at {DateTime.Now.ToString()}");
Excel.Application xlApp;
Workbooks xlWorkbooks;
Workbook xlWorkbook;
xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;
xlApp.UserControl = false;
xlApp.Visible = false;
xlWorkbooks = xlApp.Workbooks;
xlWorkbook = xlWorkbooks.Open(filePath, null, ReadOnly: false);
Worksheet targetsheet = xlWorkbook.Worksheets[1];
targetsheet.Activate(); // may not be needed
for (int i = 0; i < cellList.Count; i++ )
{
Range my_range = targetsheet.Rows[(int)cellList[i][0] + 1].Cells[(int)cellList[i][1] +1];
my_range.Value2 = cellList[i][2];
Debug.WriteLine($"pass {i}");
Debug.WriteLine((int)cellList[i][0] + 1);
Debug.WriteLine((int)cellList[i][1] + 1);
Debug.WriteLine(cellList[i][2]);
Marshal.ReleaseComObject(my_range);
}
xlWorkbook.Close(true, Type.Missing, Type.Missing);
Marshal.ReleaseComObject(xlWorkbook); // do I need this?
Marshal.ReleaseComObject(xlWorkbooks); // do I need this?
Marshal.ReleaseComObject(xlApp); // do I need this?
Debug.WriteLine($"finish datawriter at {DateTime.Now.ToString()}");
}
В двух словах, я извлекаю ячейки из заполненной таблицы данных (чтение / запись), которые были изменены, и сохраняю их в списке объектов. Каждый объект в списке содержит строку ячейки, столбец и значение изменения. Я не буду вдаваться в «почему», но давайте просто скажем, что для лучшего контроля. Код работает нормально, но все, что я прочитал, говорит о том, что использование взаимодействия Excel - не идеальный сценарий для решения такой задачи. Я не уверен, что моя логика c идеально подходит для достижения цели обновления случайных ячеек в электронной таблице.
В данный момент выполнение этого кода занимает пару секунд или более, и это происходит как я обновляю больше ячеек.
Я посмотрел на OLEDB, чтобы читать и записывать данные в электронные таблицы. Он работает очень хорошо, и я достигаю значительных улучшений скорости по сравнению с Excel Interop, но кажется, что он отлично подходит для чтения всей электронной таблицы или добавления строк данных в мою электронную таблицу. Из того, что я исследовал, я не могу найти способ выбрать ячейку на основе строки и столбца (или много разных ячеек) и обновить
Есть ли способ сделать это быстрее или я застрял в Excel Interop?
ps любое предлагаемое чтение всегда полезно для меня, так как я довольно новичок в c# и все еще изучаю все входы и выходы. У меня часто возникают проблемы с поиском того, что я ищу: - (
спасибо
РЕДАКТИРОВАТЬ: я не ищу ответ на основе мнения. Этот код занимает 1,5 - 2 секунды, чтобы выполнить его задача. Я ищу ответ, в котором выполнение кода выполняется быстрее, чем то, что он делает.