当前位置: 首页 > 知识库问答 >
问题:

C#Excel:从不同工作簿复制工作表的问题

李兴为
2023-03-14
Workbook currBook = Globals.ThisAddIn.GetActiveWorkbook();
Workbook copyBook = Globals.ThisAddIn.OpenWorkbook(Globals.ThisAddIn.Application.ActiveWorkbook.Path + @"\copyFile.xlsm", true, true);

//required worksheet
Worksheet copySheet = Globals.ThisAddIn.GetWorksheet(copyBook, "ToCopy");
copySheet.Copy(currBook.Worksheets[1]);

//close workbook
copyBook.Close();
public Excel.Worksheet GetWorksheet(Excel.Workbook book, string sheetName, bool create = false)
{
    foreach (Excel.Worksheet sheet in book.Worksheets)
    {
        //worksheet with name found
        if (sheet.Name == sheetName)
        {
            sheet.Activate();
            return sheet;
        }
    }

    //worksheet can't be found
    if (create)
    {
        Excel.Worksheet sheet = book.Worksheets.Add();
        sheet.Name = sheetName;
        sheet.Activate();
        return sheet;
    }

    return null;
}

共有1个答案

简俊楚
2023-03-14

有趣的是,我只是在做其他事情...

为了指定目标,需要使用range.copy,而不是sheet.copy:

copySheet.UsedRange.Copy(currBook.Worksheets[1].Range["A1"]); 

如果无法指定目标,则Excel将数据放入新工作簿中。

 类似资料:
  • 所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作

  • 2,3和6-12被跳过。下面是我的代码: 我认为这个问题与行“wb1.sheets(1).Range(”a“&Range(”a1“).end(xlDown).row+1)”有关,但我不知道如何解决这个问题。有什么建议吗?谢谢!

  • 我有一段巧妙的代码,它根据指定单元格中的特定文本输入隐藏/隐藏表。在Book1中的Sheet1中(比方说),如果我改变单元格A1中的文本(比方说文本是苹果、橘子等),我会在同一本书中的sheet2上得到某些表格(让我们称之为答题卡)。 现在,在另一本书中,我有一个表,其中包含所有可能的文本值(Apple,oranges,等等)。我想写一个代码,首先通过这个表,使值在book1.sheet1(“sh

  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误

  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。