#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 соответственно. Это я могу сделать легко. Проблема в том, что они выполняются последовательно и занимают слишком много времени. Есть ли способ заполнить все три рабочих листа и добавить их в книгу почти одновременно, запустив три функции?. Я не думаю, что решение Александру отвечает на мой вопрос, поскольку листы все равно будут добавляться в книгу по одному за раз.