繁体   English   中英

如何将单个工作表从一个.XLS文件复制到另一个文件?

[英]How can I copy a single worksheet from one .XLS file to another?

我正在努力将整个工作表从现有的.XLS文件复制到我在应用程序中创建的新Excel文件中。 到目前为止,这是我的代码:

Microsoft.Office.Interop.Excel.Workbook tempworkbook = workbooks.Open(
           Directory.GetCurrentDirectory() + "\\Template.xlsx", //FileName
           0, //UpdateLinks
           true, //ReadOnly
           5, //Format
           Type.Missing, //Password
           Type.Missing, //WriteResPassword
           true,//IgnoreReadOnlyRecommended
           Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, //Origin
           "\t", //Delimiter
           false, //Editable
           false, //Notify
           0, //Converter
           false, //AddToMRU
           1, //Local
           0 //CorruptLoad
           );
        Microsoft.Office.Interop.Excel.Worksheet tmp1 = (Microsoft.Office.Interop.Excel.Worksheet)tempworkbook.Sheets["GSM Data"];
        string test = tmp1.get_Range("B2", "B2").Value2.ToString(); //test to see if sheet can be accessed - value should be "Database";
        tmp1.Copy(Type.Missing, wsGSMData); //copy worksheet into wsGSMData (which is the sheet in the new XLS file) 

但是我在最后一行遇到的错误是:

服务器引发异常。 (来自HRESULT的异常:0x80010105(RPC_E_SERVERFAULT))

本质上,我作为tmp1提取的工作表应该进入名为wsGSMData的工作表,这是我在新的.XLS工作簿(称为subsetworkbook)中创建的工作表(总共7个工作表之一):

 Microsoft.Office.Interop.Excel.Worksheet wsGSMData = (Microsoft.Office.Interop.Excel.Worksheet)subsetworkbook.Sheets["Sheet7"];

我究竟做错了什么?

可能您的Excel文件的访问模式存在问题,这会导致(HRESULT的异常:0x80010105(RPC_E_SERVERFAULT))

尝试检查Excel菜单中的设置: 复查>共享工作簿>允许多个用户更改...-您应尝试取消选中此复选框。

然后返回到您的代码并检查所有行,您可以在其中更改此设置,尤其是SaveAs函数。 如果看到xlShared ,请将其替换为xlExclusive (请参见下面的示例)。

尝试将图表添加到文件时遇到了相同的问题。 Google解决方案无法解决我的问题,因此我必须自己找出问题所在。 在尝试通过不同方法将图表添加到新的新文件中之后,我意识到此行中的上述异常:

Microsoft::Office::Interop::Excel::ChartObject ^ExcelChartObj = ExcelChartObjs->Add(100, 100, 300, 250); //create chart object (left, top, width, height)

实际上是由以下事实引起的:原始文件从一开始就选中了“允许多个用户更改”复选框,此外,我自己的代码还将其重新保存为xlShared-两次! (是的,双重保存不是错误,在我的情况下是这样,因为我的程序解决了一个繁重的任务,在此过程中,我需要通过两个不同的步骤将数据输入到同一文件中)

这是工作代码(适用于C ++ / CLI Windows窗体),最终使我的情况下,HRESULT的异常:0x80010105(RPC_E_SERVERFAULT))消失了:

ExcelApp->ActiveWorkbook->SaveAs(ExcFileName, Microsoft::Office::Interop::Excel::XlFileFormat::xlOpenXMLWorkbook, Type::Missing, Type::Missing,
    Type::Missing, Type::Missing, Microsoft::Office::Interop::Excel::XlSaveAsAccessMode::xlExclusive, Type::Missing, Type::Missing, Type::Missing,
    Type::Missing, Type::Missing); //save Excel book (access mode - xlExclusive, not xlShared!)

我希望它也会对那里的人有所帮助! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM