使用C#从Excel读取单元格的方法是什么?

时间:2017-12-19 13:12:50

标签: c# excel excel-interop

如果我们想要读取或写入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中都很好?

2 个答案:

答案 0 :(得分:5)

两种方式非常不同。

srcWorkSheet.Cells[1, 1].value2 = "foo bar";
srcRange.Cells[2, 2].Value2 = "foo bar";
  • 2.用法采用UsedRange的2.行,2列上的单元格。如果Excel中的UsedRangeB2:D5,则会将值设为C3

enter image description here

  • 将名为Range的变量作为Range类实际上是一个好主意。 WorkSheetWorkBook也是如此。

答案 1 :(得分:1)

任何一个选项都可以使用,但只要你必须修改工作表的布局,它们就会变得混乱。

如果它是一个选项,我想添加命名范围。如果您使用的模板可以修改"开始"工作簿的状态。

我们假设您有一系列专栏,其中一个专栏包含" foo"值。您可以添加一个名称,如" fooColumn"到列中的整个列或顶部单元格。

然后您可以使用

获取列号
worksheet.Range("fooColumn").Column

如果您在工作表上移动元素,则可以保护您不必在整个地方手动编辑列号或行号。

要说明其他人所说的话,请使用EPPlus而不是Interop。您仍然可以使用命名范围。但是EPPlus是好的,当COM对象没有被释放时,Interop会带来各种各样的痛苦。 Interop自动化操作文件的应用程序。 EPPlus只适用于该文件。