5

25 程度のワークシートを含む Excel があり、各ワークシートを独自の新しいワークブックとして保存したいだけです。コードを実行すると、個々のシートではなくワークブック全体がコピーされます。どんな助けでも素晴らしいでしょう。

string FileDropLocation = @"C:\ExcelFiles";
        string file_FullFileName = @"C:\ts\Conversion\v2.xlsx";
        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(file_FullFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
for (int i = 0; i < workBook.Worksheets.Count; i++)
        {
            Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[i+1];
            workSheet.SaveAs(FileDropLocation + "\\" + workSheet.Name);
        }
        workBook.Close();
4

3 に答える 3

5

現在のforループの代わりにこれを試してください。

    foreach(Worksheet sheet in workBook.Worksheets)
    {
        var newbook = app.Workbooks.Add(1);
        sheet.Copy(newbook.Sheets[1]);

        newbook.SaveAs(FileDropLocation + "\\" + sheet.Name);
        newbook.Close();
    }

    workBook.Close();

念のために言ってWorkbooks.Add()おくと、デフォルトの空白のシート (通常は Sheet1) にあると思われるので、コピーしたシートだけが必要な場合は、明示的に削除する必要があります。

于 2013-02-06T18:43:15.917 に答える
1

私はこれがうまくいくことを知っています。

Microsoft.Office.Interop.Excel.Application xl = null;
            Microsoft.Office.Interop.Excel._Workbook wb = null;
            xl = new Microsoft.Office.Interop.Excel.Application();
            xl.SheetsInNewWorkbook = 1;
            xl.Visible = true;
            wb = (Microsoft.Office.Interop.Excel._Workbook)(xl.Workbooks.Add(Type.Missing));

            wb.SaveAs(FileDropLocation + "\\" + workBook.Sheets[i + 1].Name, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            wb.Close(true, Type.Missing, Type.Missing);
            xl.Quit();
            Microsoft.Office.Interop.Excel.Workbook destWorkbook = null;
            Microsoft.Office.Interop.Excel.Worksheet workSheet = null;
            Microsoft.Office.Interop.Excel.Worksheet newWorksheet = null;

            destWorkbook = app.Workbooks.Open(FileDropLocation + "\\" + workBook.Sheets[i + 1].Name + ".xls", false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[i + 1];
            newWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)destWorkbook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            app.DisplayAlerts = false;
            workSheet.Copy(Type.Missing,newWorksheet);
            destWorkbook.Save();
于 2013-02-06T19:00:05.307 に答える
0

...ループ内に新しいワークブックを作成し、シートをそのワークブックに移動する必要があります。私は VB でプログラミングしているので、推測ですが、foo ループ内のコードは次のようになります。

Microsoft.Office.Interop.Excel.Workbook workBook2 = app.Workbooks.Add(Missing.Value)
Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[i+1];
workSheet.Copy(workBook2.Sheets(1))

次に、他のシートなどを削除するコードを追加できます。

お役に立てば幸いです。

于 2013-02-06T18:30:46.843 に答える