在C#用户控件中嵌入excel表

时间:2009-04-16 16:47:33

标签: c# excel

我需要在C#语言的用户控件中嵌入Excel工作表部分(而不是整个工作表)。我想操纵它上面的数据并将其保存在一个集合中。

最好的方法是什么?

3 个答案:

答案 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文件部分。

您还可以找到these links useful

答案 2 :(得分:0)

查看Microsoft.Office.Interop.Excel库。有很多excel控件可以使用excel文件和操作。