C#-如何将单个Excel工作表从一个工作簿复制到另一个工作簿?
我需要将工作表从一个工作簿复制到另一个工作簿,我有点卡住了。前提是我有一个“主”工作簿,其中存储了许多报告的模板,然后我需要创建一个特定工作表的空白副本,并将其添加到新工作簿中C#-如何将单个Excel工作表从一个工作簿复制到另一个工作簿?,c#,excel,interop,C#,Excel,Interop,我需要将工作表从一个工作簿复制到另一个工作簿,我有点卡住了。前提是我有一个“主”工作簿,其中存储了许多报告的模板,然后我需要创建一个特定工作表的空白副本,并将其添加到新工作簿中 Private Sub ThisWorkbook_Startup() Handles Me.Startup Me.Application.Workbooks.Open(filePath) Me.Application.Workbooks(2).Worksheets("Reporte"). _
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
这就是我到目前为止所做的:
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);
}
}
目前唯一的问题是,当我在工作表上调用.Save()时,它会将原始工作簿中的所有工作表保存到新工作簿中。关于如何纠正这个问题有什么想法吗
提前感谢,Sonny您也可以使用
Sheet.Copy()
方法
基本上,Sheet.copy
复制工作表,同时自动创建新工作簿
在调用工作表后,尝试将以下行添加到代码中。获取\u项目
:
// 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()
函数的参考:
我意识到这是一个有点晚的回复,但我对此有点纠结,所以我想我应该发布我的解决方案,以便它可以帮助其他人解决这个问题 要多次填写模板工作表:
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();
}
公共无效测试()
{
Excel.applicationexcelapp;
string fileTarget=“C:\target.xlsx”;
string fileTemplate=“C:\template.xlsx”;
excelApp=新的Excel.Application();
Excel.工作簿wbTemp,wbTarget;
Excel.sh工作表;
//创建目标工作簿
wbTarget=excelApp.Workbooks.Open(文件模板);
//填写目标工作簿
//打开模板工作表
sh=wbTarget.Worksheets[“模板”];
//填写一些数据
sh.Cells[1,1]=“你好,世界!”;
//重命名工作表
sh.Name=“1.SHEET”;
//保存文件
wbTarget.SaveAs(fileTarget);
//遍历其余的文件
对于(int i=1;i<3;i++)
{
//在临时工作簿中打开模板文件
wbTemp=excelApp.Workbooks.Open(文件模板);
//填写临时工作簿
//打开模板工作表
sh=wbTemp.工作表[“模板”];
//填写一些数据
sh.Cells[1,1]=“你好,世界!第“+i+”。次”;
//重命名工作表
sh.Name=i+“.SHEET”;
//将工作表复制到目标工作簿
sh.Copy(wbTarget.Worksheets[1]);
//关闭临时工作簿而不保存
wbTemp.Close(假);
}
//关闭并保存目标工作簿
wbTarget.Close(真);
//杀死excelapp
excelApp.Quit();
}
我想对这个问题给出一个答案,尽管它已经被问了一年多了。我自己在开发一个项目时也遇到了同样的问题,我花了一段时间才找到答案。我将使用VB.NET代码而不是C#发布,因为我不熟悉上一篇文章
这里是交易,为了在Excel工作簿之间复制工作表,绝对有必要只使用一个Excel应用程序对象,然后使用该应用程序打开两个工作簿,然后我们可以使用已知的Worker.copy方法,只需指定在另一个工作簿中的工作表之后或之前复制工作表
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工作簿项目的应用程序,但这也可以:
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应用程序将同时显示这两个工作簿,因此在完成复制后,如果您不想显示源工作簿(或者至少不想让用户做任何事情),则应关闭源工作簿
这是我可以做到的,用户将看到一个闪烁的新工作簿弹出,然后关闭,这不是真的整洁,但到目前为止,我不知道如何做它(或以不可见的方式进行此复制过程)
我希望这仍然有一些价值。致以最诚挚的问候。您好,您在脚本组件中使用了哪些引用?