5

Excel から最初の数行を削除し、ファイルを .csv にフォーマットするための C# アプリがありますが、.xlsx ではなく .xlsm を取得し、操作方法が見つからず、列からデータをロードすることさえできません。SAP からのレポート ファイルがあり、内部にマクロが見つかりません。私はこのようなことを試しました

        /* Load Excel File */
        Excel.Application excelApp = new Excel.Application();
        string workbookPath = @"file.xlsm";
        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

        /* Load worksheets collection */
        Excel.Sheets excelSheets = excelWorkbook.Worksheets;

        /* Select first worksheet */
        Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets[1];

        /* Deleting first 87 Rows */
        Excel.Range range = excelWorksheet.get_Range("1:87").EntireRow;
        range.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);

        /* Save File */
        excelWorkbook.SaveAs(@"out_file.xlsm");
        excelWorkbook.Close(false);
        excelApp.Application.Quit();

        /* Release COM objects otherwise Excel remain running */
        releaseObject(range);
        releaseObject(excelWorkbook);
        releaseObject(excelWorksheet);
        releaseObject(excelApp);

これは .xlsx 拡張子で機能します (行を削除して別の名前で保存します) が、.xlsm では機能しません (プログラムは正常に実行されますが、データは削除されません)。手動でExcelファイルを.xlsxとして保存し、そのファイルでプログラムを実行しても機能しませんが、貼り付けデータを別の.xlsxに手動でコピーしてそのファイルでプログラムを実行すると、機能しません。このプログラムを書き直して、.xlsm ファイルから行を削除するにはどうすればよいですか? 助けてください、ありがとう。

4

1 に答える 1

2

Christian Sauer のおかげで、EPPLUS.dll は機能しました。

ステップ1

ソリューション エクスプローラー > プロジェクト名 > 追加 > 参照 > EPPLUS.dll を参照

ステップ2

using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.IO;

ステップ 3 (行範囲の削除)

 using (var p = new ExcelPackage(new FileInfo(@"file.xlsm")))
            {
                var sheet = p.Workbook.Worksheets["Sheet1"];
                sheet.DeleteRow(1, 87);
                p.SaveAs(new FileInfo(@"output.xlsm"));
            }
)

ステップ 4 (.xlsm を .csv にエクスポート)

これらの行の間にコードを挿入

                sheet.DeleteRow(1, 87);
           ====>[HERE]
                p.SaveAs(new FileInfo(@"output.xlsm"));

/* Code placed to [HERE] placeholder */
using (var writer = File.CreateText(@"output.csv"))
            {
                var rowCount = sheet.Dimension.End.Row;
                var columnCount = sheet.Dimension.End.Column;
                for (var r = 1; r <= rowCount; r++)
                {
                    for (var c = 1; c <= columnCount; c++)
                    {
                        writer.Write(sheet.Cells[r, c].Value);
                        writer.Write(";");
                    }
                    writer.WriteLine();
                }
            }
于 2014-08-05T14:44:08.157 に答える