为什么ExcelQueryFactory只返回255列

时间:2014-02-20 17:04:05

标签: linq-to-excel

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

V0 >= W0 + 0
V1 >= W1 + 1
V2 >= W2 + 2
V3 >= W3 + 3 ...

EDATA1包含前255列 EDATA2包含剩余的
如果列多于510,我们可以使用其他命中EDATA3 ExcelData现在包含所有列和行限制为100000但也可以增加/减少

答案 2 :(得分: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));
        }
    }   
}