PDF に変換する必要があるユーザー提供の Excel ファイルがあります。Excel 相互運用機能を使用して、これをうまく行うことができます.ExportAsFixedFormat()
。ワークブックに何百万行もあると、私の問題が発生します。これは、50,000 ページ以上のファイルになります。ワークブックのすべての行にコンテンツが含まれていれば問題ありません。ただし、これらのファイルの 1 つが表示されるたびに、おそらく 50 行にコンテンツがあり、残りは空白です。適切なサイズの PDF にエクスポートできるように、空の行を削除するにはどうすればよいですか?
最後の行から始めて、行にコンテンツがあるかどうかを1つずつ
CountA
確認し、ある場合は削除してみました。これには永遠に時間がかかるだけでなく、約 100k 行の後に次のエラーで失敗するようです。コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できません。
使用してみまし
SpecialCells(XlCellType.xlCellTypeLastCell, XlSpecialCellsValue.xlTextValues)
たが、セルに書式設定 (背景色など) がある場合は行が含まれます。Worksheet.UsedRange
その後、すべてを使用してから削除しようとしましたUsedRange
が、ポイント2と同じ問題があります。
これは私が試したコードです:
for (int i = 0; i < worksheets.Count; i++)
{
sheet = worksheets[i + 1];
rows = sheet.Rows;
currentRowIndex = rows.Count;
bool contentFound = false;
while (!contentFound && currentRowIndex > 0)
{
currentRow = rows[currentRowIndex];
if (Application.WorksheetFunction.CountA(currentRow) == 0)
{
currentRow.Delete();
}
else
{
contentFound = true;
}
Marshal.FinalReleaseComObject(currentRow);
currentRowIndex--;
}
Marshal.FinalReleaseComObject(rows);
Marshal.FinalReleaseComObject(sheet);
}
for (int i = 0; i < worksheets.Count; i++)
{
sheet = worksheets[i + 1];
rows = sheet.Rows;
lastCell = rows.SpecialCells(XlCellType.xlCellTypeLastCell, XlSpecialCellsValue.xlTextValues);
int startRow = lastCell.Row;
Range range = sheet.get_Range(lastCell.get_Address(RowAbsolute: startRow));
range.Delete();
Marshal.FinalReleaseComObject(range);
Marshal.FinalReleaseComObject(lastCell);
Marshal.FinalReleaseComObject(rows);
Marshal.FinalReleaseComObject(sheet);
}
コードに問題がありますか?これは相互運用の問題ですか?それとも、Excel でできることの制限にすぎないのでしょうか? 私が試みていることを行うためのより良い方法はありますか?