【问题标题】:Populate Excel with data from LINQ to SQL query使用来自 LINQ to SQL 查询的数据填充 Excel
【发布时间】:2008-12-18 00:18:33
【问题描述】:

我正在尝试使用 OLE 将一些数据从 C# 中的 LINQ 查询发送到 Excel 速度表

我有一个这样的查询:

Var data = from d in db.{MyTable}
           where d.Name = "Test"
           select d;

我的 Excel OLE 对象工作正常,我只是不知道如何使用来自 LINQ 查询的数据填充 Excel 中的单元格。

PS:如果这有什么不同的话,我使用的是 Excel 2003。

谁能帮我解决这个问题?

【问题讨论】:

    标签: c# winforms linq excel ole


    【解决方案1】:

    为每个 Excel 单元格发送单独的 OLE 命令非常慢,因此关键是创建一个像这样的对象数组:

    int noOfRows = data.Count - 1;
    int noOfColumns = mydataclass.GetType().GetProperties().Count() - 1;
    Object[noOfRows, noOfColumns] myArray;
    

    发送对象数组允许您发送混合数据类型,例如字符串、整数、日期等。但是,如果您知道数据都是文本,例如,您可以发送一个字符串数组。

    需要从查询中填充数组,方法是分配每个单独的值,或者可能使用反射来获取数据对象属性。然后您可以像这样将数组发送到 Excel:

    XLOLESheetobj.Range("A1","Z20").Value = myArray;
    

    您可以将 Z20 替换为列数 -> Char + 行数 -> 字符串。

    【讨论】:

      【解决方案2】:

      我假设您没有在 Web 场景中使用 OLE,因为它最终会失败。

      如果您只需要原始数据,可以转储到制表符分隔的文本文件:

      var lines = data.Select(d => d.Name + '\t' + d.AnotherProperty + ...);

      【讨论】:

        【解决方案3】:

        您最好的选择是使用 Excel XML 格式。我写了一篇关于如何实现这一目标的博文:http://www.aaron-powell.com/blog.aspx?id=1237

        您的另一个选择是查看 Excel 的 LINQ 提供程序 - http://www.codeplex.com/xlslinq

        【讨论】:

        • 他提到他使用的是 2003 而不是 2007
        • 那有什么不同呢?我的博客文章中提到的不是 Office 2003 支持的 Open XML,而是 Office 2003 之前支持的 Excel XML 标记。
        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        相关资源
        最近更新 更多