簡體   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