LoadFromCollection水平
使用EPPlus我想水平加载数据。
var randomData = new[] { "Foo", "Bar", "Baz" }.ToList(); ws.Cells["B4"].LoadFromCollection(randomData);
默认行为是垂直的,这段代码将导致:
这是我需要的:
使用EPPlus的缺点是,他们的文档很粗略。
如果我被定罪循环,我可以编写代码:
public byte[] TestExcellGeneration_HorizontalLoadFromCollection() { byte[] result = null; using (ExcelPackage pck = new ExcelPackage()) { var foo = pck.Workbook.Worksheets.Add("Foo"); var randomData = new[] { "Foo", "Bar", "Baz" }.ToList(); //foo.Cells["B4"].LoadFromCollection(randomData); int startColumn = 2; // "B"; int startRow = 4; for(int i = 0; i < randomData.Count; i++) { foo.Cells[startRow, startColumn + i].Value = randomData[i]; } result = pck.GetAsByteArray(); } return result; }
而当你从TestMethod调用这个时:
[TestMethod] public void TestExcellGeneration_HorizontalLoadFromCollection() { var excelFileBytes = (new MyExcelGenerator()).TestExcellGeneration_HorizontalLoadFromCollection(); OpenExcelFromTempFile(excelFileBytes); } private void OpenExcelFromTempFile(byte[] data) { string tempPath = System.IO.Path.GetTempFileName(); System.IO.File.WriteAllBytes(tempPath, data); Application excelApplication = new Application(); _Workbook excelWorkbook; excelWorkbook = excelApplication.Workbooks.Open(tempPath); excelApplication.Visible = true; }
它导致:
如果你做了这样的事情呢?
var randomData = new[] { "Foo", "Bar", "Baz" }.ToList(); //ws.Cells["B4"].LoadFromCollection(randomData); ws.Cells["B4"].LoadFromArrays(new List<string[]>(new[] { randomData.ToArray() }));
这在输出中给了我这个:
请记住,如果您担心性能问题,那么对于非常大的集合,最好是编写自己的代码,因为LoadFrom*
方法会增加开销以应对多种情况。