This answer(ジェネリックしかし、DataTableのでは動作します)小さなチャンクにDataTableのを分割する方法を提供し、修正が必要な問題は、データテーブルの大きさであることから、このようなものは動作するはずです:
その後
public static IEnumerable<IEnumerable<T>> ToChunks<T>(this IEnumerable<T> enumerable, int chunkSize)
{
int itemsReturned = 0;
var list = enumerable.ToList(); // Prevent multiple execution of IEnumerable.
int count = list.Count;
while (itemsReturned < count)
{
int currentChunkSize = Math.Min(chunkSize, count - itemsReturned);
yield return list.GetRange(itemsReturned, currentChunkSize);
itemsReturned += currentChunkSize;
}
}
次のように、それを使用する:
int rowCount = 1;
int chunkSize = 50000;
using (ExcelPackage objExcelPackage = new ExcelPackage())
{
ExcelWorksheet objWorksheet = objExcelPackage.Workbook.Worksheets.Add("Conversion Data");
//objWorksheet.Cells["A1"].LoadFromDataTable(FinalResult, true);
foreach (var smallerTable in FinalResult.AsEnumerable().ToChunks(chunkSize))
{
objWorksheet.Cells["A" + rowCount].LoadFromDataTable(smallerTable, true);
rowCount += chunkSize;
}
を基本的には、ROWCOUNTが各ITERの後、行を追加する場所Excelシート上のトラックを維持することです1、50001、100001などでA1、A50001、A100001などに挿入します。
メモリにエラーが残っている場合は、動作するまでchunkSizeを小さくしてください。
エクスポートに使用した関連コードを表示してください。 –
using(ExcelPackage objExcelPackage = new ExcelPackage()) { ExcelWorksheet objWorksheet = objExcelPackage.Workbook.Worksheets.Add( "変換データ"); objWorksheet.Cells ["A1"]。LoadFromDataTable(FinalResult、true); –
ExcelPackageは、少なくとも2年以内に更新されていない第三者のライブラリのようです。なぜあなたは適切なOpenXML SDKを使用していませんか? – Equalsk