создание нескольких листов Excel одновременно

#c# #vb.net #multithreading #asynchronous

#c# #vb.net #многопоточность #асинхронный

Вопрос:

Я могу создавать листы Excel на C # / VB.net с помощью Microsoft.Офис.Взаимодействие.Excel.Рабочий лист и добавьте их в рабочую книгу и, в конечном итоге, откройте Excel следующим образом:

  Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs)
    Dim excel As Object = New Microsoft.Office.Interop.Excel.Application()
    Dim wb As Object = excel.Workbooks.Add()
    Dim wk1 As Object = CType(wb.Sheets.Add(), Microsoft.Office.Interop.Excel.Worksheet)
    Dim wk2 As Object = CType(wb.Sheets.Add(), Microsoft.Office.Interop.Excel.Worksheet)
    Dim wk3 As Object = CType(wb.Sheets.Add(), Microsoft.Office.Interop.Excel.Worksheet)

    wk3.Name = "Work Sheet Three"
    wk2.Name = "Work Sheet Two"
    wk1.Name = "Work Sheet One"

    OpenWorkSheetOne()
    OpenWorkSheetTwo()
    OpenWorkSheetThree()

    excel.Visible = True
    wb.Activate()

End Sub
  

C#

  Private void MainWindow_Loaded(object sender, RoutedEventArgs e)
 { 
  object excel = new Microsoft.Office.Interop.Excel.Application();
  object wb = excel.Workbooks.Add();
  object wk1 = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets.Add();
  object wk2 = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets.Add();
  object wk3 = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets.Add();
  wk3.Name = "Work Sheet Three";
  wk2.Name = "Work Sheet Two";
  wk1.Name = "Work Sheet One";

  OpenWorkSheetOne();
  OpenWorkSheetTwo();
  OpenWorkSheetThree();

  excel.Visible = true;
  wb.Activate();

   }
  

У меня есть несколько листов, и обработка занимает слишком много времени. Я хочу (возможно) обрабатывать листы одновременно в разных потоках (я думаю) и добавлять их в книгу одновременно.

Как я могу это сделать и сократить время обработки?

Я погуглил и не могу найти подходящий ответ.

Комментарии:

1. Вы можете снова погуглить, я не думаю, что сложно найти руководство по многопоточному программированию .

2. Попытка многопоточного взаимодействия с Excel редко бывает хорошей идеей. Что в методах OpenWorkSheet_XYZ_ занимает много времени. Существует ли какое-либо вычислительно интенсивное определение значения? Или этот код содержит чрезвычайно наивный шаблон кода для установки непрерывной ячейки диапазона по мучительной ячейке?

Ответ №1:

Попробуйте эту библиотеку:
https://github.com/ClosedXML/ClosedXML

Это очень просто в использовании :

 using (var workbook = new XLWorkbook()){
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)";
workbook.SaveAs("HelloWorld.xlsx");
  

}

Комментарии:

1. OpenworksheetOne, OpenworksheetTwo и OpenWorksheetThree — это функции, которые заполняют данные на листах 1, 2 и 3 соответственно. Это я могу сделать легко. Проблема в том, что они выполняются последовательно и занимают слишком много времени. Есть ли способ заполнить все три рабочих листа и добавить их в книгу почти одновременно, запустив три функции?. Я не думаю, что решение Александру отвечает на мой вопрос, поскольку листы все равно будут добавляться в книгу по одному за раз.