Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+;打开Excel文件时,打印区域丢失+; 我遇到了一个非常奇怪的错误——从C++打开Excel模板时,打印区域丢失了。_C++_Excel - Fatal编程技术网

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

从C+;打开Excel文件时,打印区域丢失+; 我遇到了一个非常奇怪的错误——从C++打开Excel模板时,打印区域丢失了。,c++,excel,C++,Excel,我有一个Excel模板文件-“MyFile.xltx”。在文件中的一张图纸中,我设置了一个打印区域。如果我在资源管理器中双击文件打开它,一切都会按预期进行-打印区域仍然存在。但是如果我用C++代码打开文件,就删除了打印区域。其他所有内容看起来都是文件,唯一缺少的是打印区域 你有下面的代码-尽可能赤裸裸。我在程序中使用自动生成的Excel帮助程序-例如,“Open”调用映射到一个简单的“InvokeHelper(0x2aa,…”调用。(我尝试使用较新的0x783调用-带有两个额外参数-但得到了相同

我有一个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);

我在用excel调查类似问题时看到了您的问题。当我用excel打开文件时,打印区域工作正常,但是如果我通过(AutoIt)脚本访问文件,就会发现缺少打印区域的文件

经过大量的搜索工作,我发现问题在于我使用的是荷兰语版本的excel,而不是英语版本,这意味着打印区域(这是一个定义的单元格范围,在(公式>名称管理器)下找到,称为打印区域)没有被识别出来,而是excel在查找单元格范围:“Afdrukbereik”(印刷区为荷兰语)

当您从C++打开文件时,请查看您的文件,看看是否设置了PrttJEnter,如果您重新创建了为其创建了定义名称的打印区域…


我希望我有点道理,它可以帮助您。

谢谢!这正是我所需要的。这与您遇到的问题相同-不知何故,在打开XLTX文件时,打印区域名称的本地化名称丢失了。然后瑞典Excel无法识别该名称为打印区域。Excel中存在一个错误,但现在我们知道了原因,我们也许我能找到一个解决办法。非常感谢您花时间回答!:-)我在delphi内部的荷兰版excel和com/ole上也遇到了同样的问题。从explorer/excel打开时工作正常。使用com/ole打开时,它本身不工作。我的解决方案是在excellapp.names集合中循环,查找名为“Print_area”的命名范围,提取工作表和范围,然后在活动工作簿的工作表中循环,如果遇到“Print_area”命名范围中引用的工作表,我会将提取的范围从“Print_area”设置为sheet.pagesetup.printarea。我在workbooks.open命令之后执行此操作