xlsx 错误:尝试解决错误时“已删除记录:/xl/workbook.xml 部分的命名范围”

问题描述 投票:0回答:8

我有一个使用 SSIS 生成的 xlsx 文件。此文件的数据是通过数据流任务写入的,其中 xlsx 文件是 oledb 目标。我使用以下连接字符串作为 OLEDB 连接的表达式:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ @[User::ExcelPath] +";
Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"

文件在数据流任务之前打开得很好。数据流任务完成后,我得到一个对话框,如下所示:

enter image description here

当我单击“是”时,我收到另一条消息: enter image description here

xml文件的内容是

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">       <logFileName>error072840_02.xml</logFileName><summary>Errors were detected in file   'C:\output\documentId-1.xlsx'</summary><removedRecords summary="Following is a list of removed records:"><removedRecord>Removed Records: Named range from /xl/workbook.xml part (Workbook)</removedRecord></removedRecords></recoveryLog>

我无法弄清楚到底是什么导致了这个错误。任何帮助将不胜感激。 TIA

xml excel ssis xlsx
8个回答
22
投票

我在使用 EPPlus 自定义现有模板时遇到了这个问题。对我来说,问题出在模板本身,因为它包含对查找表的无效引用。我在公式 -> 名称管理器中找到了这个。

如果您遇到此问题,我建议您检查模板。


13
投票

已经解决了。我真的不知道原因。做了一些研究,发现与选项卡名称相关的某些内容可能会导致此问题。我必须使用“tab”和“tab(2)”等名称的选项卡。 xlsx 可能会将它们视为相同的名称。


5
投票

就我而言,有十多个对命名范围的引用,但它们没有出现在公式->名称管理器窗口中。 我必须将 xlsx 文件重命名为 .zip 文件,打开 /xl/workbook.xml,手动删除整个 DefinedName 节点,然后将其重命名回 .xlsx。 瞧!

那是我生命中我永远不会再回来的两个小时。


3
投票

在我的例子中,类似的错误是由工作表(选项卡)名称超过 30 个字符引起的。


1
投票

您的选项卡名称中可能有特殊字符,并且您使用选项卡名称定义名称范围。 例如选项卡名称是“A(1)”,只需将其更改为“A(1)”


1
投票

就我个人而言,空格/特殊字符与选项卡(工作表)名称无关。命名范围本身不能包含空格/特殊字符,因为它被视为变量


1
投票

对我来说,这是一个带有宏的按钮,分配了如下值:'MyMacro("MyParam")'


0
投票

我今天使用 Excel 2007 遇到了同样的问题,时不时会弹出这个错误,Excel 修复了它。自己的文件中的某些内容“损坏”总是让人感觉不太好。

这是一个非常简单的列表,包含列标题和一些数据,只有大约 30 行。它使用一些条件格式和简单的公式,并且始终引用同一行。没什么特别的。以及列标题行上的自动筛选器。

这似乎就是问题所在。

如果将 Excel 文件解压到文件夹中(无需重命名,可以直接在文件上使用 7-zip 并“解压到文件夹..”)并进入其中的“xl”文件夹,其中有“workbook.xml” ”。如果使用 Notepad++ 以及 XML 插件和“漂亮打印”打开它,它看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
    <fileVersion appName="xl" lastEdited="4" lowestEdited="6" rupBuild="4507"/>
    <workbookPr/>
    <bookViews>
        <workbookView xWindow="0" yWindow="0" windowWidth="30165" windowHeight="26010"/>
    </bookViews>
    <sheets>
        <sheet name="Tabelle1" sheetId="1" r:id="rId1"/>
    </sheets>
    <definedNames>
        <definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">[1]#REF!$A$2:$M$73</definedName>
    </definedNames>
    <calcPr calcId="125725"/>
    <extLst xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main">
        <ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}">
            <x15:workbookPr chartTrackingRefBase="1"/>
        </ext>
    </extLst>
</workbook>

导致错误消息的问题是:

<definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">[1]#REF!$A$2:$M$73</definedName>

“#REF!”标记问题。此条目是 Excel 保存自动筛选区域的方式。

我的数据只有 30 行,但我使用相同的公式和条件格式设置标记了更大的区域(最多 73 行),以便当我在列表末尾输入新行数据时一切正常。 但这似乎会让自动过滤器陷入麻烦(至少对于 Excel 2007),并且由于此定义的名称被标记为“隐藏”,因此您在 UI 中的 Excel 名称管理器中找不到它。

解决方案很简单:只需删除自动筛选并保存文件,这也会删除此条目。在再次启用之前,仅标记数据行,不标记空行,然后使用自动筛选 - 和#REF!消失了。

正确的看起来像这样:

<definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">Tabelle1!$A$2:$M$33</definedName>

当再次打开工作簿时,不再出现错误消息。

因此,每当出现此错误时,请首先检查工作表中的自动筛选器,如果您想获得更多信息,请将 Excel 文件解压缩到文件夹中并查看 workbook.xml 以查看此处可能出现的问题(在让 Excel 修复之前)当然)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.