我需要在C#语言的用户控件中嵌入Excel工作表部分(而不是整个工作表)。我想操纵它上面的数据并将其保存在一个集合中。
最好的方法是什么?
答案 0 :(得分:6)
我会用Excel COM库打开电子表格。如果添加对Microsoft Excel对象库的引用,则可以转到Com界面。
使用以下语句添加:
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;
然后您可以通过执行以下操作来阅读电子表格:
private void GetData(string fileName, string tabName)
{
Workbook theWorkbook;
Application ExcelObj = null;
ExcelObj = new Application();
theWorkbook = ExcelObj.Workbooks.Open(fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
Sheets sheets = theWorkbook.Worksheets;
Worksheet worksheet = (Worksheet)sheets[tabName];
Range range = worksheet.get_Range("A1:A1", Type.Missing);
string data = range.Text as string;
//
// TODO : store the data
//
theWorkbook.Close(false, fileName, null);
}
此代码将A1单元格的内容读入字符串。
使用Excel COM接口的一个怪癖是,您必须访问Range中的数据,即使您只需要一个单元格。您可以将范围设置为一组单元格,然后您可以迭代它返回的集合以获取每个单元格的内容。
您还需要在文件名和选项卡名称上添加一些错误检查/处理。
还有一种方法可以使用ODBC从Excel中读取,但电子表格必须以某种方式进行格式化。第1行必须有一个标题数据。我发现使用COM接口更容易。
获得所需数据后,可以将其放入类型化的DataSet中。然后,如果您在WPF中使用WinForms或ListBox,则可以将该数据集绑定到DataGridView。如果您只想以XML格式保存数据,可以使用DataSet WriteXml函数将数据存储到文件中。
答案 1 :(得分:5)
为什么不使用填充了您要更改的数据的DataGridView?
完成任何更改后,将DataGridView中的数据保存到您从中开始的Excel文件部分。
答案 2 :(得分:0)
查看Microsoft.Office.Interop.Excel库。有很多excel控件可以使用excel文件和操作。