我遇到了一个非常奇怪的错误 - 从C ++打开Excel模板时打印区域丢失了。
我有一个Excel模板文件 - “MyFile.xltx”。在文件中的一个工作表中,我设置了一个打印区域。如果我在资源管理器中双击它打开文件,一切都按预期工作 - 打印区域仍然存在。但是,如果我在C ++代码中打开文件,则会删除打印区域。其他一切看起来都是文件,唯一缺少的是打印区域。
您有以下代码 - 尽可能作为准系统。我在我的程序中使用自动生成的Excel帮助程序 - 例如“Open”调用映射到一个简单的“InvokeHelper(0x2aa,...”调用。(我尝试使用较新的0x783调用 - 带有两个额外的参数 - 但我得到相同的结果。)
我正在运行Microsoft Office 2010和Visual Studio 2010。
我不是COM专家,所以也许我做错了什么。但这是一个简单的开放,所以我认为这是一个奇怪的错误...我会非常感谢任何帮助! : - )
/来自瑞典的安德斯
//
// 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);
答案 0 :(得分:2)
当我用excel调查类似的问题时,我看到了你的问题。当我用excel打开文件时,打印区域工作正常,但如果我通过(AutoIt)脚本访问它们缺少打印区域的文件
经过大量的搜索工作,我发现问题在于我使用的是荷兰语版本的excel而不是英语,这意味着打印区域(这是一个定义的单元格区域,在(公式>)下找到) Name Manger)名为Print_area)并未被认出,但excel正在寻找细胞范围:“Afdrukbereik”(荷兰人为printarea)。
从C ++打开文件时,你可以查看你的文件,看看是否设置了print_area,以及你是否重新创建了为其创建了定义名称的打印区域......
我希望我有所帮助,它可以帮助你。