【问题标题】:Embed excel sheet in C# user control在 C# 用户控件中嵌入 Excel 工作表
【发布时间】:2009-04-17 01:51:29
【问题描述】:

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

最好的方法是什么?

【问题讨论】:

  • 您只需要以表格格式显示数据还是您确实需要 Excel 渲染引擎?您可以只读取 excel 文件并将其显示在 DataGridView 中。否则,您将需要做一些 OLE/COM 的事情(我想)
  • 如果您确实需要 excel 工作表,可以选择将 WebBrowser 控件放在 winform 上,并将内容类型加载为 excel 文档。
  • 自 2009 年以来有什么新的选择吗?

标签: c# excel


【解决方案1】:

我将使用 Excel COM 库打开电子表格。如果添加对 Microsoft Excel 对象库的引用,就可以进入 Com 界面。

添加这些 using 语句:

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 接口的一个怪癖是您必须访问范围内的数据,即使您只需要一个单元格。您可以将范围设置为一组单元格,然后您可以遍历它返回的集合以获取每个单元格的内容。

您还希望在文件名和选项卡名称上添加一些错误检查/处理。

还有一种方法可以使用 ODBC 从 Excel 中读取,但电子表格必须以某种方式格式化。第1行必须有一个标题数据。我发现使用COM接口更容易。

一旦你获得了你需要的数据,你就可以把它放到一个类型化的数据集中。然后,如果您在 WPF 中使用 WinForms 或 ListBox,则可以将该数据集绑定到 DataGridView。如果您只想将数据保存为 XML 格式,您可以使用 DataSet WriteXml 函数将数据存储到文件中。

【讨论】:

    【解决方案2】:

    为什么不用DataGridView 填充您要更改的数据?

    完成任何更改后,将 DataGridView 中的数据保存到您从中提取数据的 Excel 文件部分。

    您还可以找到these links useful

    【讨论】:

      【解决方案3】:

      查看 Microsoft.Office.Interop.Excel 库。里面有很多 excel 控件可以处理 excel 文件和操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多