c# - 如何使用 VSTO 顺利地将数据从 C# 获取到 Excel 并再次返回

标签 c# excel datatable dataset vsto

我正在用 C# 编写 Excel 的应用程序级插件。

该加载项用于将外部来源的数据(该加载项为此提供了一些 GUI 选项等)获取到 Excel 中。该数据不会被更新并发送回数据源或类似的东西 - 尽管用户当然可以自由地在本地 Excel 应用程序中编辑数据。

数据以 XML 格式到达,目前我使用代码生成工具能够将 xml 文档反序列化为 C# 对象。数据遵循关系模型。

我现在正在考虑的事情:

  • 我应该使用 DataTables 将所有内容转换为 DataSet 对象吗?
  • 如果我这样做了,我怎样才能将这些数据放入 Excel 工作表中?是否有可能例如在 Excel 中创建一个表并将数据绑定(bind)到我的数据表/数据集?
  • 实际上,我认为我本身并不想要一个“表格”,而是只需将数据放入单元格中,然后用户就可以使用这些单元格。那么只提供 2D 数组是否更好?但是从 DataTable 数据行转换为 2D 数组不是很痛苦吗?

还有一些其他问题...

  • 将数据从 Excel 读回 C# 的最简单/最佳方法是什么?我想我对在这里获得二维数组会很满意。但遍历“Range”对象似乎很麻烦。一定有更好的方法吗?
  • 工作表可能会在第一行中包含列名称,然后在其余行中包含数据。当用户选择组成我的“表格”的单元格时,C# 代码有什么方法可以识别这一点吗?或者这只是我必须在代码中手动处理的事情?

我以前从未处理过这个问题,所以如果有些问题看起来很愚蠢,我深表歉意。如有任何帮助,我们将不胜感激。

最佳答案

以下是我之前工作中打开 excel 并从 excel 获取数据的一些示例: 公共(public)类 ExcelModule { 私有(private) Excel.Application excelApp; 私有(private) Excel.Workbook excelBook; 私有(private) Excel.Worksheet excelSheet;

    object misValue = System.Reflection.Missing.Value;
    object oMissing = System.Reflection.Missing.Value;

    public ExcelModule()
    {

    }

    public void OpenWorksheet(string fileName, int sheetNum)
    {
        excelApp = new Excel.Application();
        excelBook = excelApp.Workbooks.Open(fileName,
                0,
                true,
                5,
                "",
                "",
                true,
                Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                "\t",
                false,
                false,
                0,
                true,
                1,
                0);
        excelSheet = (Excel.Worksheet)excelBook.Worksheets.get_Item(sheetNum);

    }

    public string GetValue(string cellAddress)
    {
        if (excelSheet.get_Range(cellAddress, cellAddress).Value2 != null)
            return excelSheet.get_Range(cellAddress, cellAddress).Value2.ToString();
        else
            return "";
    }

    public int Close()
    {
        excelApp.Quit();
        return 0;
    }

    ~ExcelModule()
    {
        excelApp.Quit();
    }
}

要将数据写入 Excel,您可以使用:

excelSheet.get_Range(cellAddress, cellAddress).Value2 = "your text";

注释: *我使用的是 VS10 和 Office2007

关于c# - 如何使用 VSTO 顺利地将数据从 C# 获取到 Excel 并再次返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279251/

相关文章:

C#:作为字节数组下载后文件损坏

c# - Onclick 事件在其下方显示一条红线

c# - 将 Excel 宏转换为 C#?

c# - 如何使用 ExcelDataReader nuget 创建 Excel 文件和写入

xml - VBA Excel 通过转换为 Long 给出了 overlow

javascript - 数据表,如果在选项内

c# - 正则表达式匹配字符串中可选的整个单词

c# - 如何通过 C# 在我们的系统中搜索媒体文件?

vb.net - 将 2 列数据表的值与空格连接,并在 vb.net 中将 "-"替换为空

javascript - jquery 数据表中的动态排序