【问题标题】:How to copy excel worksheets Into another excel workbook without opening the excel file in c# winforms?如何在不打开c#winforms中的excel文件的情况下将excel工作表复制到另一个excel工作簿中?
【发布时间】:2013-05-07 01:38:54
【问题描述】:

在 C# windows 应用程序中, 我有很多 excel 工作簿,我想要的是将工作表从 excel 工作簿复制到单个工作簿。 这是可能的,但我必须打开 Excel 工作簿才能这样做。

        Excel.Application app = new Excel.Application();

        app.Visible = true;

        app.WindowState = XlWindowState.xlMinimized;

        app.Workbooks.Add("");
        app.Workbooks.Add(@"Path\WorkBook1.xlsx");
        app.Workbooks.Add(@"Path\WorkBook2.xlsx");

        for (int i = 2; i <= app.Workbooks.Count; i++)
        {
            int count = app.Workbooks[i].Worksheets.Count;

            app.Workbooks[i].Activate();
            for (int j = 1; j <= count; j++)
            {
                Excel._Worksheet ws = (Excel._Worksheet)app.Workbooks[i].Worksheets[j];

                ws.Select(true);
                ws.Cells.Select();

                Excel.Range sel = (Excel.Range)app.Selection;
                sel.Copy(Type.Missing);

                Excel._Worksheet sheet = (Excel._Worksheet)app.Workbooks[1].Worksheets.Add(
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing
                    );

                sheet.Paste(Type.Missing, Type.Missing);

                sheet.Name = app.Workbooks[i].Worksheets[j].Name;
            }


        }

        app.DisplayAlerts = false;
        app.Workbooks[3].Close();
        app.Workbooks[2].Close();
        app.DisplayAlerts = true;

        Cursor = Cursors.Default;

        MessageBox.Show("Successfully Generated Excel...!", "Excel Tool", MessageBoxButtons.OK, MessageBoxIcon.Information);

是否可以不打开excel表,复制所有数据及其样式?

【问题讨论】:

  • 无法在不打开 Excel 文件的情况下从工作簿复制单个工作表。但是,如果您只想在后台运行复制操作,您可以在单独的 Excel 应用程序中执行此操作。有一次,我不得不复制一些包含启动宏的模板表。我必须在关闭宏的单独(不可见)Excel 应用程序中打开此模板。

标签: c# winforms excel com ms-office


【解决方案1】:

要复制工作表及其所有内容和格式而不选择和复制工作表本身的内容,您可以使用Worksheet.Copy。你会这样使用它:

Excel._Worksheet ws = (Excel._Worksheet)app.Workbooks[i].Worksheets[j];
Excel._Worksheet sheet = (Excel._Worksheet)app.Workbooks[1].Worksheets.Add(
                Type.Missing, Type.Missing, Type.Missing, Type.Missing
                );
ws.Copy(Before: sheet);

但是,如果您的问题的实际意思是您想将工作簿的内容复制到一个通用工作簿中而不打开文件,那么我认为这是不可能的。您需要打开文件才能访问数据。

【讨论】:

  • 这不是问题的答案!!
  • 引用实际问题,而不仅仅是帖子的标题:“是否可以不打开excel表,复制所有数据及其样式?”这不会打开工作表并复制所有数据。它复制工作表。
  • 你能把它运行到关闭的工作簿吗?我不确定...你测试了吗??
  • 我在我的另一个项目中使用几乎这个精确的调用序列将工作表从模板工作簿复制到另一个用于生成报告的工作簿。我有兴趣了解在不访问文件的情况下复制文件内容是否有误。
  • 在某种程度上似乎是一种替代方案。我可以删除这一行并将其隐藏 app.Visible = true;然后关闭其他工作表并保存并打开我的工作簿
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多