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

时间:2015-10-01 11:07:04

标签: c# excel

我正在努力将整个工作表从现有的.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的工作表,这是我在新工作表中创建的工作表(总共7页之一)。 XLS工作簿(称为subsetworkbook):

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的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!)

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