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>