我有一个使用 SSIS 生成的 xlsx 文件。此文件的数据是通过数据流任务写入的,其中 xlsx 文件是 oledb 目标。我使用以下连接字符串作为 OLEDB 连接的表达式:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ @[User::ExcelPath] +";
Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"
文件在数据流任务之前打开得很好。数据流任务完成后,我得到一个对话框,如下所示:
当我单击“是”时,我收到另一条消息:
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
我在使用 EPPlus 自定义现有模板时遇到了这个问题。对我来说,问题出在模板本身,因为它包含对查找表的无效引用。我在公式 -> 名称管理器中找到了这个。
如果您遇到此问题,我建议您检查模板。
已经解决了。我真的不知道原因。做了一些研究,发现与选项卡名称相关的某些内容可能会导致此问题。我必须使用“tab”和“tab(2)”等名称的选项卡。 xlsx 可能会将它们视为相同的名称。
就我而言,有十多个对命名范围的引用,但它们没有出现在公式->名称管理器窗口中。 我必须将 xlsx 文件重命名为 .zip 文件,打开 /xl/workbook.xml,手动删除整个 DefinedName 节点,然后将其重命名回 .xlsx。 瞧!
那是我生命中我永远不会再回来的两个小时。
在我的例子中,类似的错误是由工作表(选项卡)名称超过 30 个字符引起的。
您的选项卡名称中可能有特殊字符,并且您使用选项卡名称定义名称范围。 例如选项卡名称是“A(1)”,只需将其更改为“A(1)”
就我个人而言,空格/特殊字符与选项卡(工作表)名称无关。命名范围本身不能包含空格/特殊字符,因为它被视为变量
对我来说,这是一个带有宏的按钮,分配了如下值:'MyMacro("MyParam")'
我今天使用 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 修复之前)当然)。