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*方法会增加开销以应对多种情况。