我有一个包含大约 500 列的电子表格。当我执行下面的 linq 查询时,它只返回 255 列。这是对 ExcelQueryFactory 的限制吗?我的电子表格可能有问题吗?
var book = new ExcelQueryFactory(filePath);
var data = from x in book.Worksheet("MyStatisticSheet")
select x;
我有一个包含大约 500 列的电子表格。当我执行下面的 linq 查询时,它只返回 255 列。这是对 ExcelQueryFactory 的限制吗?我的电子表格可能有问题吗?
var book = new ExcelQueryFactory(filePath);
var data = from x in book.Worksheet("MyStatisticSheet")
select x;
这是 LinqToExcel 使用的 Jet 和 Access 数据库引擎的限制。
我遇到了同样的问题,我找到了解决方法
var excel = new LinqToExcel.ExcelQueryFactory(InputFileName);
var EData1 = (from c in excel.WorksheetRangeNoHeader("A1","IU100000", InputFileWorkSheet) select c).ToList<LinqToExcel.RowNoHeader>();
var EData2 = (from c in excel.WorksheetRangeNoHeader("IV1","ZZ100000", InputFileWorkSheet) select c).ToList<LinqToExcel.RowNoHeader>();
var ExcelData = new List<LinqToExcel.RowNoHeader>();
for (var i = 0; i < EData1.Count; i++)
{
var RowWithoutHeader = EData1[i].Concat(EData2[i]);
ExcelData.Add(new LinqToExcel.RowNoHeader(RowWithoutHeader));
}
EDATA1 包含前 255 列
EDATA2 包含剩余
的如果列超过 510,我们可以有其他命中 EDATA3。ExcelData
现在包含所有列和行,限制为 100000,但也可以增加/减少
基于@Sunil 的改进答案:
void Main()
{
var excel = new LinqToExcel.ExcelQueryFactory(filePath);
var eData1 = (from c in excel.WorksheetRange<Foo>("A1", "IU100000", "SheetName") select c).ToList<Foo>();
var eData2 = (from c in excel.WorksheetRange<Foo>("IV1", "ZZ100000", "SheetName") select c).ToList<Foo>();
var excelData = new List<Foo>();
for (var i = 0; i < eData1.Count; i++)
{
Merge(eData2[i], eData1[i]);
excelData.Add(eData1[i]);
}
}
public class Foo
{
public string Field1 { get; set; }
public string Field2 { get; set; } // located in column > 255
}
public void Merge<T>(T source, T target)
{
foreach (var p in typeof(T).GetProperties())
{
if (p.GetValue(target) == null) {
p.SetValue(target, p.GetValue(source));
}
}
}