如何使用EPPlus在多个工作表上书写

我正在使用下面的代码片段使用EPPlus将一些数据写入Excel文件。 我的应用程序做了一些大数据处理,而且由于excel有大约100万行的限制,所以空间不时出现。 所以我想要实现的是这个,一旦System.ArgumentException : row out of range检测或换句话说..没有空间留在工作表中..其余的数据将被写入第二工作表中相同的工作簿。 我已经尝试了下面的代码,但没有成功。 任何帮助将不胜感激!

  try { for (int i = 0; i < data.Count(); i++) { var cell1 = ws.Cells[rowIndex, colIndex]; cell1.Value = data[i]; colIndex++; } rowIndex++; } catch (System.ArgumentException) { for (int i = 0; i < data.Count(); i++) { var cell2 = ws1.Cells[rowIndex, colIndex]; cell2.Value = data[i]; colIndex++; } rowIndex++; } 

你不应该使用catch来处理这种逻辑 – 更不得已而为之。 更好地devise你的代码来处理你的情况,因为这是非常可预测的。

Excel 2007格式有1,048,576行的硬限制。 有了这个,你可以确切地知道在进入一个新的工作表之前应该放多less行。 从那里,循环和math很简单:

 [TestMethod] public void Big_Row_Count_Test() { var existingFile = new FileInfo(@"c:\temp\temp.xlsx"); if (existingFile.Exists) existingFile.Delete(); const int maxExcelRows = 1048576; using (var package = new ExcelPackage(existingFile)) { //Assume a data row count var rowCount = 2000000; //Determine number of sheets var sheetCount = (int)Math.Ceiling((double)rowCount/ maxExcelRows); for (var i = 0; i < sheetCount; i++) { var ws = package.Workbook.Worksheets.Add(String.Format("Sheet{0}", i)); var sheetRowLimit = Math.Min((i + 1)*maxExcelRows, rowCount); //Remember +1 for 1-based excel index for (var j = i * maxExcelRows + 1; j <= sheetRowLimit; j++) { var cell1 = ws.Cells[j - (i*maxExcelRows), 1]; cell1.Value = j; } } package.Save(); } }