繁体   English   中英

Excel 2002 XML 电子表格 - 验证问题

[英]Excel 2002 XML Spreadsheet - validation trouble

我正在以有点古老的 2003 SpreadsheetML 风格创建 Excel 工作表(主要是因为所有内容都包含在一个文件中)。 试图实现一个选择列表让我发疯——要么是因为我的愚蠢,要么是因为缺乏文档。

看看这个(与最新版本的 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 行中的名称列表的两个工作表,加上一个带有简单验证规则的单元格:输入,A1 可能仅包含名称“Anna”之一。 “伯塔”或“克劳迪娅”。 按预期工作。

但随后我将验证更改为我真正想要实现的(即使用另一个工作表中的列表):

<Value>check!R2</Value>

这仍会加载到 Excel 中,但没有下拉菜单。 如果我查看验证规则,Excel 声称“参考错误”(或类似的 - 我使用的是德语语言环境),即使我在“check.R2”中找不到任何错误:我可以手动更正此检查,$2, $2(单元格引用的 UI 方式)。 我可以将结果保存到 XML 文件中。 结果正是我尝试但没有成功的“check.R2”......

但是一旦我打开(保存的)文件,引用再次无效。

这让我发疯——必须有某种方法来验证另一个工作表中的值。 不幸的是,没有太多可用的文档(实际上从来没有); 我的来源之一是https://schemas.liquid-technologies.com/Office/2003/?page=excelss_xsd.html列出了所有可用的标签,但没有列出其语义的细节。

有什么想法吗?

应该避免使用旧的 2003 XML模式。 但如果使用,那么也只能使用 2003 年可用的功能。 所以@Rory 在他的评论中是正确的。 2003 年Excel无法直接从其他工作表获取数据验证列表。 必须创建引用另一张表的命名范围。 然后那些Name s 已被 datavalidation 列表引用。

所以以下将起作用:

<?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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM