好的,所以我正在尝试使用 excel 互操作库设置单元格的值。我可以通过以下方式做到这一点:
sheet.Cells[row, col] = value;
但是对于我设置的数量来说,它非常慢。所以我试图走这条路:
Range excelRange = sheet.UsedRange;
excelRange.Cells.set_Item(row, col, value);
代码执行,但单元格中没有数据。关于我所缺少的任何建议?谢谢!
好的,所以我正在尝试使用 excel 互操作库设置单元格的值。我可以通过以下方式做到这一点:
sheet.Cells[row, col] = value;
但是对于我设置的数量来说,它非常慢。所以我试图走这条路:
Range excelRange = sheet.UsedRange;
excelRange.Cells.set_Item(row, col, value);
代码执行,但单元格中没有数据。关于我所缺少的任何建议?谢谢!
如果您禁用了屏幕更新 ( ),您的第一种方法应该适用于任何合理(以及许多不合理)数量的单元格Application.ScreenUpdating = false
。描述如何使用 C# 按行和列访问设置单元格的知识库文章。
您是否尝试过一次设置所有值,而不是遍历数组并一次设置一个单元格?这样,您只需将数据通过 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,并考虑将计算设置为手动,直到您完成复制过程。
简单的解决方案,但在这里您需要通过在 nuget 控制台中写入来安装 Package Microsoft.Office.Interop.Excel
安装包 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();
请试试
[excelWorksheet].Cells[1, 1] = "[String you want]";