我正在尝试使用 OLE 将 C# 中的 LINQ 查询中的一些数据发送到 Excel 速度表
我有一个这样的查询:
Var data = from d in db.{MyTable}
where d.Name = "Test"
select d;
我的 Excel OLE 对象工作正常,我只是不知道如何用来自 LINQ 查询的数据填充 Excel 中的单元格。
PS:如果这有什么不同,我正在使用 Excel 2003。
谁能帮我这个?
为每个 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;
您可以用列数 -> Char + 行数 -> 字符串替换 Z20。
我假设您没有在 Web 场景中使用 OLE,因为它最终会失败。
如果您只需要原始数据,可以转储到制表符分隔的文本文件:
var lines = data.Select(d => d.Name + '\t' + d.AnotherProperty + ...);
您最好的选择是使用 Excel XML 格式。我写了一篇关于如何实现这一目标的博客文章:http ://www.aaron-powell.com/blog.aspx?id=1237
您的另一个选择是查看 Excel 的 LINQ 提供程序 - http://www.codeplex.com/xlslinq。