C# Excel - save each worksheet to a new workbook

前端 未结 3 1731
南方客
南方客 2020-12-18 06:30

I have an excel with 25 or so worksheets I just want to save each worksheet as it\'s own new Workbook. When I run the code it copys the entire workbook just not the individ

相关标签:
3条回答
  • 2020-12-18 07:11

    Try this in place of your current for loop and below

        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();
    

    Just to note, I believe Workbooks.Add() places in a default blank sheet (typically Sheet1), so if you want just the copied sheet you'll have to explicitly remove it.

    0 讨论(0)
  • 2020-12-18 07:16

    I know this works.

    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();
    
    0 讨论(0)
  • 2020-12-18 07:18

    ... You need to create a new workbook in your loop and move the sheet to that workbook. I program in VB, so i'm guessing, but the code inside your foor loop should look something like this:

    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))
    

    Then you can add code to delete the other sheets, etc.

    Hope tihs helps.

    0 讨论(0)
提交回复
热议问题