我想简单地在工作簿中复制一张表并给它一个不同的名称。
var pointName1 = workbook.Worksheets["PointName1"] as Worksheet;
pointName1.Copy(); // How do I access this newly created sheet?
理想情况下,我希望能够编写像这样的方法
pointName1.CopyTo("New Sheet");
其中“新工作表”是“PointName1”的重命名副本。
有时,PointName1将是工作簿中唯一的工作表,有时会有其他工作表。
答案 0 :(得分:7)
您可以通过多种方式实现这一目标 - 可能最简单的方法是复制最后一张工作表,然后使用索引重命名:
Excel.Application xlApp = Marshal.GetActiveObject("Excel.Application") as Excel.Application;
Excel.Workbook xlWb = xlApp.ActiveWorkbook as Excel.Workbook;
Excel.Worksheet xlSht = xlWb.Sheets[1];
xlSht.Copy(Type.Missing, xlWb.Sheets[xlWb.Sheets.Count]); // copy
xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET"; // rename
我相信这个MSDN guide也会回答你的问题。
如果您想获取工作表的索引,请查找Worksheet.Index
property。
答案 1 :(得分:3)
您应该能够使用复制功能,但您无法在同一步骤中重命名工作表。 MSDN文档显示了其他参数:
pointName1.Copy(pointName1, Type.Missing); //Place a copy before the existing sheet
从文档中: 如果未指定“之前”或“之后”,则Microsoft Office Excel将创建包含复制的工作表的新工作簿。
要重命名工作表,您需要获取对新工作表的引用(按索引或名称),并使用Name
的{{1}}属性更改名称。
编辑:
如果您使用上述代码,则可以使用原始工作表的索引(因为您将原件放在原件之前):
worksheet
答案 2 :(得分:0)
最简单的方法是将其复制到接受答案中显示的最后一张纸之后。
请注意,如果excel文件包含隐藏的图纸,则副本将放置在可见图纸和隐藏图纸之间,因此隐藏的图纸将被推到右侧。
如果您尝试使用xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET"
设置名称,则最终会重命名您最后隐藏的工作表而不是新副本。
我设法通过它的名字访问新副本来解决这个问题:xlWb.Sheets["_oldName_ (2)"].Name = "NEW SHEET"
。
使您能够使用xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET"
的其他修复方法是在复制所需的工作表之前设置所有工作表。
答案 3 :(得分:0)
嗯,这里提到的其他解决方案对我不起作用。我有这个解决方案。
步骤1:创建源文件(即TempFile)的副本
步骤2:将所需的源文件表复制到TempFile
步骤3:删除源文件
第4步::将TempFile重命名为Source File。
注意:您将需要来自以下位置的“ Microsoft.Office.Interop.Excel”包 Nuget用于此解决方案。另外,添加
using Excel = Microsoft.Office.Interop.Excel;
static void Main(string[] args)
{
Excel.Application excelApp;
string sourceFileName = "Original.xlsx"; //Source excel file
string tempFileName = "temp.xlsx";
string folderPath = @"C:\FodlerPath\";
string sourceFilePath = System.IO.Path.Combine(folderPath, sourceFileName);
string destinationFilePath = System.IO.Path.Combine(folderPath, tempFileName);
System.IO.File.Copy(sourceFilePath,destinationFilePath,true);
/************************************************************************************/
excelApp = new Excel.Application();
Excel.Workbook wbSource, wbTarget;
Excel.Worksheet currentSheet;
wbSource = excelApp.Workbooks.Open(sourceFilePath);
wbTarget = excelApp.Workbooks.Open(destinationFilePath);
currentSheet = wbSource.Worksheets["Sheet1"]; //Sheet which you want to copy
currentSheet.Name = "TempSheet"; //Give a name to destination sheet
currentSheet.Copy(wbTarget.Worksheets[1]); //Actual copy
wbSource.Close(false);
wbTarget.Close(true);
excelApp.Quit();
System.IO.File.Delete(sourceFilePath);
System.IO.File.Move(destinationFilePath, sourceFilePath);
}