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
'programing' 카테고리의 다른 글
"너무 많은 데이터베이스 연결"의 원인 (0) | 2023.10.29 |
---|---|
사용자 지정 비교 술어가 포함된 힙큐 (0) | 2023.10.29 |
워드프레스 플러그인: javascrtipt 태그에서 속성으로 사용할 매개 변수를 어떻게 전달합니까? (0) | 2023.10.29 |
MariaDB가 모든 데이터베이스의 쿼리 처리를 중지합니다. (0) | 2023.10.29 |
워드 프레스 플러그인이 활성 상태이지만 관리 도구에서 확인되지 않음 (0) | 2023.10.29 |