我正在将一个项目移动到Azure。该项目使用LinqToExcel从Excel文件中读取数据。
Azure有一些依赖项,这在LinqToExcel WebApp中是不受支持的。因此,我正在将代码迁移到EPPlus。
但是,像这样的查找怎么可能在EPPlus中查找呢?
var excel = new ExcelQueryFactory(excelFile);
var results = from c in excel.Worksheet(mySheet)
where c["columnName"] == Value1.ToString()
select c;
myValue = results.First()["MyColumnName2"]发布于 2017-06-13 08:05:29
我上次研究LinqToExcel已经有几年了,但据我记忆所及,它将列视为属性,即对象的属性--实际上,这是一种巧妙的做法。但是EPPlus并没有构建这种封装。
以下面这样的文件为例:
https://github.com/paulyoder/LinqToExcel/blob/master/src/LinqToExcel.Tests/ExcelFiles/Companies.xlsx

假设你想让所有员工和首席执行官的名字都有s,那么你能做的最好的事情是:
var fi = new FileInfo(@"C:\temp\Companies.xlsx");
using (var pck = new ExcelPackage(fi))
{
var wb = pck.Workbook;
var ws = wb.Worksheets["Sheet1"];
var headerRow = ws.Cells
.Where(cell => cell.Start.Row == 1)
.ToList();
var ceoCountColNum = headerRow
.First(cell => cell.Value.ToString() == "CEO")
.Start
.Column;
var empCountColNum = headerRow
.First(cell => cell.Value.ToString() == "EmployeeCount")
.Start
.Column;
var rows = ws.Cells
.GroupBy(cell => cell.Start.Row)
.Skip(1)
.Select(g => g.ToList())
.Where(row =>
(double) row[empCountColNum - 1].Value > 200 &&
row[ceoCountColNum - 1].Value.ToString().Contains("s"))
.ToList();
Console.WriteLine(rows.Count); //return 2
}https://stackoverflow.com/questions/44504182
复制相似问题