programing

C# - 한 워크북에서 다른 워크북으로 Excel 워크시트를 복사하는 방법은 무엇입니까?

bestprogram 2023. 10. 29. 19:55

C# - 한 워크북에서 다른 워크북으로 Excel 워크시트를 복사하는 방법은 무엇입니까?

한 워크북에서 다른 워크북으로 워크시트를 복사해야 하는데 좀 막힙니다.그 전제는 여러 보고서의 템플릿을 저장하는 "마스터" 워크북을 가지고 있는데, 그런 다음 특정 워크시트의 빈 복사본을 만들어 새 워크북에 추가해야 한다는 것입니다.

이것이 지금까지 제가 가진 것입니다.

private void CreateNewWorkbook(Tables table)
{
    Excel.Application app = null;
    Excel.Workbook book = null;
    Excel.Worksheet sheet = null;

    try
    {
        string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
        string filePath = System.IO.Path.Combine(startPath, "sal1011forms.xls");
        Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();

        app = new Excel.Application();
        book = app.Workbooks.Open(filePath);
        sheet = (Excel.Worksheet)book.Worksheets.get_Item((int)table + 1);

        sfd.AddExtension = true;
        sfd.FileName = table.ToString() + ".xls";
        sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        if (sfd.ShowDialog() == true)
        {
            sheet.SaveAs(sfd.FileName);
        }
    }
    finally
    {
        if (book != null)
        {
            book.Close();
        }
        if (app != null)
        {
            app.Quit();
        }
        this.ReleaseObject(sheet);
        this.ReleaseObject(book);
        this.ReleaseObject(app);
    }
}

지금 제가 안고 있는 유일한 문제는 제가 전화를 할 때입니다.워크시트에 저장()하면 원래 워크시트의 모든 워크시트가 새 워크시트로 저장됩니다.이 문제를 해결할 방법에 대한 의견이 있습니까?

미리 감사드립니다.
소니

당신은 또한 사용할 수 있습니다.Sheet.Copy()방법.

기본적으로.Sheet.copy시트를 복사하면 새 워크북이 동시에 자동으로 생성됩니다.

코드에 다음 행을 추가해 보십시오.Worksheets.get_Item:

// Copies sheet and puts the copy into a new workbook
sheet.Copy(Type.Missing, Type.Missing);

// Sets the sheet variable to the copied sheet in the new workbook
sheet = app.Workbooks[2].Sheets[1];

여기에 그에 대한 참고 자료가 있습니다.Copy()기능도 : MSDN 링크

이것이 다소 늦은 답변이라는 것을 알고 있지만, 저는 이 문제를 겪고 있는 다른 사람에게 도움이 될 수 있도록 해결책을 게시해야겠다고 생각했습니다.

여러 번 채워넣을 템플릿 시트가 있는 경우:

    public void test()
    {

        Excel.Application excelApp;

        string fileTarget = "C:\target.xlsx";
        string fileTemplate = "C:\template.xlsx";
        excelApp = new Excel.Application();
        Excel.Workbook wbTemp, wbTarget;
        Excel.Worksheet sh;

        //Create target workbook
        wbTarget = excelApp.Workbooks.Open(fileTemplate);

        //Fill target workbook
        //Open the template sheet
        sh = wbTarget.Worksheets["TEMPLATE"];
        //Fill in some data
        sh.Cells[1, 1] = "HELLO WORLD!";
        //Rename sheet
        sh.Name = "1. SHEET";


        //Save file
        wbTarget.SaveAs(fileTarget);

        //Iterate through the rest of the files
        for (int i = 1; i < 3; i++)
        {
            //Open template file in temporary workbook
            wbTemp = excelApp.Workbooks.Open(fileTemplate);

            //Fill temporary workbook
            //Open the template sheet
            sh = wbTemp.Worksheets["TEMPLATE"];
            //Fill in some data
            sh.Cells[1, 1] = "HELLO WORLD! FOR THE " + i + ".TH TIME";
            //Rename sheet
            sh.Name = i + ". SHEET";

            //Copy sheet to target workbook
            sh.Copy(wbTarget.Worksheets[1]);
            //Close temporary workbook without saving
            wbTemp.Close(false);
        }

        //Close and save target workbook
        wbTarget.Close(true);
        //Kill excelapp
        excelApp.Quit();
    }

질문을 받은 지 1년이 넘었음에도 이 질문에 대한 답을 드리고 싶습니다.제가 개발 중인 프로젝트에 대해서 저도 같은 문제를 겪었고, 답을 찾는데 시간이 좀 걸렸습니다.VB로 올리겠습니다.나는 마지막을 잘 몰라서 C# 대신 NET 코드.

Excel 워크북 간에 시트를 복사하기 위해서는 하나의 Excel Application 개체만 사용한 다음 해당 단일 애플리케이션으로 두 워크북을 여는 것이 절대적으로 필요합니다. 그러면 알려진 워크시트를 사용할 수 있습니다.방법을 복사하고 다른 워크북의 시트 뒤 또는 앞에 시트를 복사하도록 지정하기만 하면 됩니다.

Private Sub ThisWorkbook_Startup() Handles Me.Startup
    Me.Application.Workbooks.Open(filePath)
    Me.Application.Workbooks(2).Worksheets("Reporte"). _
          Copy(After:=Me.Application.Workbooks(1).Worksheets("Hoja1"))
    Me.Application.Workbooks(2).Close()
    Me.Application.DisplayAlerts = False
    Globals.Hoja1.Delete()
    Me.Application.DisplayAlerts = True
End Sub

이 경우 제가 사용하고 있는 Excel 응용 프로그램은 Excel Workbook 프로젝트를 실행하는 프로그램이지만 다음과 같이 작동합니다.

Dim xlApp As New Excel.Application
Dim book1 As Excel.Workbook
Dim book2 As Excel.Workbook
book1 = xlApp.Workbooks.Open(filePath1)
book2 = xlApp.Workbooks.Open(filePath2)

book1.Worksheets("Sheet to be copied").Copy(After:=book2.Worksheets(1))

물론 Excel 응용프로그램에 두 문제집이 모두 표시되므로 복사가 완료된 후에는 원본 문제집을 닫아야 합니다(또는 최소한 사용자가 수행할 수 있을 만큼 충분히 길지는 않음).

xlApp.Workbooks(1).Close()

이렇게 하면 사용자는 깜박이는 새 워크북이 나타났다가 닫히는 것을 볼 수 있는데, 이는 정말 깔끔하지는 않지만 지금까지 다른 방법을 전혀 모릅니다(또는 이 복사 프로세스를 보이지 않는 방식으로 수행).

이것이 여전히 가치가 있기를 바랍니다.안부 전합니다.

언급URL : https://stackoverflow.com/questions/3808368/c-sharp-how-to-copy-a-single-excel-worksheet-from-one-workbook-to-another