約 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;
私は同じ問題に直面していましたが、これに対する回避策を見つけました
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 を持つことができます
。
@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));
}
}
}