从C ++打开Excel文件时,打印区域丢失

我遇到一个非常奇怪的错误 – 从C ++打开Excel模板时,打印区域丢失。

我有一个Excel模板文件 – “MyFile.xltx”。 在文件的其中一张表格中,我设置了一个打印区域。 如果我在资源pipe理器中双击打开文件,一切都按预期工作 – 打印区域仍然存在。 但是,如果我打开我的C ++代码中的文件,打印区域被删除。 其他一切都看起来是文件,唯一缺less的是打印区域。

你有下面的代码 – 作为准系统尽可能。 我在我的程序中使用自动生成的Excel助手 – 例如,“打开”调用映射到一个简单的“InvokeHelper(0x2aa,…”)调用(我试过使用新的0x783调用 – 有两个额外的参数 – 但我得到了同样的结果。)

我正在运行Microsoft Office 2010和Visual Studio 2010。

我不是COM专家,所以也许我做错了什么。 但是这是一个简单的开放,所以我认为这是一个奇怪的错误…我将非常感谢任何帮助! 🙂

/来自瑞典的Anders

// // get CLSID for Excel // CLSID clsid; if (FAILED (CLSIDFromProgID (L"Excel.Application", &clsid))) { MessageBox ((HWND) NULL, "Can't find Excel", "", MB_OK); return; } // // attach to a running Excel application - or start one if there is no // running instance // _Application oExcelApp; IUnknown *pUnk; if (FAILED (GetActiveObject (clsid, NULL, (IUnknown **) &pUnk))) { if (!oExcelApp.CreateDispatch (clsid)) { MessageBox ((HWND) NULL, "Can't start Excel", "", MB_OK); return; } } else { LPDISPATCH lpDisp = NULL; pUnk->QueryInterface (IID_IDispatch, (void **) &lpDisp); pUnk->Release(); oExcelApp.AttachDispatch (lpDisp); } // // call the Open method for the Workbooks collection - to open the file // COleVariant vOpt ((long) DISP_E_PARAMNOTFOUND, VT_ERROR); Workbooks oBooks = oExcelApp.GetWorkbooks (); _Workbook oExcel = oBooks.Open ("MyFile.xltx", vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt); // // make the Excel workbook visible // oExcelApp.SetUserControl (TRUE); oExcelApp.SetVisible (TRUE); 

当我调查与我的excel类似的问题时,我看到你的问题。 当我用Excel打开文件时,打印区域工作正常,但如果我通过(AutoIt)脚本访问它们缺less打印区域的文件

经过大量的search工作,我发现问题是,我使用的是一个荷兰语版本的Excel,而不是英文,这意味着打印区域(这是一个定义的单元格范围,发现下(公式>名称经理)称为Print_area)没有被认可,但是excel正在寻找单元格范围:“Afdrukbereik”(荷兰语为printarea)。

你可以看看你的文件,当它从C ++打开,看是否设置了print_area,如果你重新创build打印区域定义名称是为…

我希望我能理解,并能帮助你。