1

我有一个包含大约 500 列的电子表格。当我执行下面的 linq 查询时,它只返回 255 列。这是对 ExcelQueryFactory 的限制吗?我的电子表格可能有问题吗?

var book = new ExcelQueryFactory(filePath); var data = from x in book.Worksheet("MyStatisticSheet") select x;

4

3 回答 3

3

这是 LinqToExcel 使用的 Jet 和 Access 数据库引擎的限制。

于 2014-02-20T19:20:58.147 回答
2

我遇到了同样的问题,我找到了解决方法

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,但也可以增加/减少

于 2016-01-09T19:04:28.113 回答
0

基于@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));
        }
    }   
}
于 2018-03-16T10:20:46.643 回答