如果我们想要读取或写入excel中的单元格,我发现了人们使用的两种方式。
声明:
Excel.Application ExcelApp = new Excel.Application();
Excel.Workbook srcWorkBook = ExcelApp.Workbooks.Open(@"C:\test.xls");
Excel.Worksheet srcWorkSheet = srcWorkBook.Worksheets[1];
Excel.Range srcRange = srcWorkSheet.UsedRange;
用法1:
srcWorkSheet.Cells[1, 1].value2 = "foo bar";
用法2:
srcRange.Cells[2, 2].Value2 = "foo bar";
哪一种是最好的使用方法?或者它在.NET中都很好?
答案 0 :(得分:5)
两种方式非常不同。
srcWorkSheet.Cells[1, 1].value2 = "foo bar";
1.用法是指第一个工作表的A1
单元格。
srcRange.Cells[2, 2].Value2 = "foo bar";
UsedRange
的2.行,2列上的单元格。如果Excel中的UsedRange
为B2:D5
,则会将值设为C3
:Range
的变量作为Range
类实际上不是一个好主意。 WorkSheet
和WorkBook
也是如此。答案 1 :(得分:1)
任何一个选项都可以使用,但只要你必须修改工作表的布局,它们就会变得混乱。
如果它是一个选项,我想添加命名范围。如果您使用的模板可以修改"开始"工作簿的状态。
我们假设您有一系列专栏,其中一个专栏包含" foo"值。您可以添加一个名称,如" fooColumn"到列中的整个列或顶部单元格。
然后您可以使用
获取列号worksheet.Range("fooColumn").Column
如果您在工作表上移动元素,则可以保护您不必在整个地方手动编辑列号或行号。
要说明其他人所说的话,请使用EPPlus而不是Interop。您仍然可以使用命名范围。但是EPPlus是好的,当COM对象没有被释放时,Interop会带来各种各样的痛苦。 Interop自动化操作文件的应用程序。 EPPlus只适用于该文件。