Excel 2002 XML 电子表格 - 验证问题
Excel 2002 XML Spreadsheet - validation trouble
我正在创建 Excel 有点古老的 2003 SpreadsheetML 风格的表格(主要是因为所有内容都包含在一个文件中)。试图实现一个选择列表让我发疯——要么是因为我的愚蠢,要么是因为缺乏文档。
看看这个(与最新版本的 Excel 配合得很好):
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="input">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Anna</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Berta</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Claudia</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
<DataValidation xmlns="urn:schemas-microsoft-com:office:excel">
<Range>R1C1</Range>
<Type>List</Type>
<Value>input!R2</Value>
</DataValidation>
</Worksheet>
<Worksheet ss:Name="check">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Alfred</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Bruno</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Clemens</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
</Worksheet>
</Workbook>
两个工作表的第 2 行包含一个姓名列表,外加一个具有简单验证规则的单元格:input!A1 可能只包含姓名“Anna”、“Berta”或“Claudia”之一。按预期工作。
但随后我将验证更改为我实际想要实现的(即使用其他工作表中的列表):
<Value>check!R2</Value>
这仍然加载到 Excel,但没有下拉菜单。如果我查看验证规则,Excel 声称存在“引用错误”(或类似的 - 我使用的是德语语言环境),即使我在“check!R2”中找不到任何错误。我可以手动更正这个以检查!$2:$2(单元格引用的 UI 方式),我可以将结果保存到 XML 文件中,结果就是“检查!R2”我试过了没有成功...
但是当我打开(保存的)文件时,引用再次无效。
这让我抓狂 - 必须有 一些 方法来验证另一个工作表中的值。不幸的是,没有太多可用的文档(实际上从来没有);我的来源之一是 https://schemas.liquid-technologies.com/Office/2003/?page=excelss_xsd.html,它列出了所有可用的标签,但没有列出它们的语义细节。
有什么想法吗?
应避免使用旧的 2003 XML
架构。但如果使用,则只能使用 2003 年可用的功能。所以@Rory 在他的评论中是正确的。 2003 年 Excel
无法直接从其他 sheet 获取数据验证列表。必须创建引用其他 sheet 的命名范围。然后那些 Name
被数据验证列表引用。
所以以下将起作用:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Names>
<NamedRange ss:Name="ceckRow2" ss:RefersTo="=check!R2"/>
</Names>
<Worksheet ss:Name="input">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Anna</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Berta</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Claudia</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
<DataValidation xmlns="urn:schemas-microsoft-com:office:excel">
<Range>R1C1</Range>
<Type>List</Type>
<Value>ceckRow2</Value>
</DataValidation>
</Worksheet>
<Worksheet ss:Name="check">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Alfred</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Bruno</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Clemens</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
</Worksheet>
</Workbook>
我正在创建 Excel 有点古老的 2003 SpreadsheetML 风格的表格(主要是因为所有内容都包含在一个文件中)。试图实现一个选择列表让我发疯——要么是因为我的愚蠢,要么是因为缺乏文档。
看看这个(与最新版本的 Excel 配合得很好):
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="input">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Anna</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Berta</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Claudia</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
<DataValidation xmlns="urn:schemas-microsoft-com:office:excel">
<Range>R1C1</Range>
<Type>List</Type>
<Value>input!R2</Value>
</DataValidation>
</Worksheet>
<Worksheet ss:Name="check">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Alfred</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Bruno</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Clemens</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
</Worksheet>
</Workbook>
两个工作表的第 2 行包含一个姓名列表,外加一个具有简单验证规则的单元格:input!A1 可能只包含姓名“Anna”、“Berta”或“Claudia”之一。按预期工作。
但随后我将验证更改为我实际想要实现的(即使用其他工作表中的列表):
<Value>check!R2</Value>
这仍然加载到 Excel,但没有下拉菜单。如果我查看验证规则,Excel 声称存在“引用错误”(或类似的 - 我使用的是德语语言环境),即使我在“check!R2”中找不到任何错误。我可以手动更正这个以检查!$2:$2(单元格引用的 UI 方式),我可以将结果保存到 XML 文件中,结果就是“检查!R2”我试过了没有成功...
但是当我打开(保存的)文件时,引用再次无效。
这让我抓狂 - 必须有 一些 方法来验证另一个工作表中的值。不幸的是,没有太多可用的文档(实际上从来没有);我的来源之一是 https://schemas.liquid-technologies.com/Office/2003/?page=excelss_xsd.html,它列出了所有可用的标签,但没有列出它们的语义细节。
有什么想法吗?
应避免使用旧的 2003 XML
架构。但如果使用,则只能使用 2003 年可用的功能。所以@Rory 在他的评论中是正确的。 2003 年 Excel
无法直接从其他 sheet 获取数据验证列表。必须创建引用其他 sheet 的命名范围。然后那些 Name
被数据验证列表引用。
所以以下将起作用:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Names>
<NamedRange ss:Name="ceckRow2" ss:RefersTo="=check!R2"/>
</Names>
<Worksheet ss:Name="input">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Anna</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Berta</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Claudia</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
<DataValidation xmlns="urn:schemas-microsoft-com:office:excel">
<Range>R1C1</Range>
<Type>List</Type>
<Value>ceckRow2</Value>
</DataValidation>
</Worksheet>
<Worksheet ss:Name="check">
<ss:Table>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String"/></ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell><ss:Data ss:Type="String">Alfred</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Bruno</ss:Data></ss:Cell>
<ss:Cell><ss:Data ss:Type="String">Clemens</ss:Data></ss:Cell>
</ss:Row>
</ss:Table>
</Worksheet>
</Workbook>