底线:
我可以做出哪些最简单的更改来保持这些工作表的正常运行? (整个系统在另外8到10个月内退役,它不一定是最漂亮的修复)
<小时/> 的背景
我们有一个...更老...程序生成一堆Excel XML / HTML电子表格。这些表格是纯文本XML / HTML,带有&#39; .xls&#39;延期。是的,我们得到了数据格式消息,需要使用它的人可以继续使用该消息。
由于我们将Office 2000作为公司标准(并且最初针对Excel 2000支持的内容编写),因此它一直在运行;并继续使用,只需稍微调整即可通过升级到Office 2003和Office 2007继续运行。
现在,我们的IT部门 1 开始推出Office 2010,作为Windows 7更加锁定的映像的一部分,这些人在生成的工作表上遇到问题。需要说明的是:仍然使用Office 2007的每个人都可以正常使用这些工作表 - 它只是Office 2010。
问题似乎与数据验证部分有关。
应该发生的情况是每个单元格都应该显示一个下拉列表,其中包含由同一工作表上的另一列填充的日期列表。
<小时/> 的代码:
所有工作表都以Office 2000样式开始:
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<style>
<!--table
@page
{mso-header-data:"&CRegistrationList\000APrinted\: &D\000APage &P";}
br
{mso-data-placement:same-cell;}
-->
td {border:1px solid black; border-collapse:collapse;}
td.EvenRow {background:#F5F5F5; color:black;}
td.OddRow {background:#DCDCDC; color:black;}
为了简洁起见切几行......
</style>
<!--[if gte mso 9]><xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>RegistrationList</x:Name>
进一步切换到实际导致错误的部分:(有一些额外的上下文,评论不在原文中)
</x:WorksheetOptions>
<x:DataValidation>
<x:Range>G:G</x:Range>
<x:Type>List</x:Type>
<x:Value>$K$2:$K$34</x:Value>
<x:InputMessage>Select Date from list</x:InputMessage>
<x:ErrorMessage>You must select a date from the list. Press 'Cancel' to continue.</x:ErrorMessage>
</x:DataValidation>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body>
<table>
<tr>
<th style="mso-protection:locked visible; width:95px;">EmployeeNumber</th> <!-- Col. A -->
<th style="mso-protection:locked visible; width:120px;">LastName</th> <!-- Col. B -->
<th style="mso-protection:locked visible; width:120px;">FirstName</th> <!-- Col. C -->
<th style="mso-protection:locked visible; width:80px;">AccountingCode</th> <!-- Col. D -->
<th style="mso-protection:locked visible; width:90px;">ClinicalCreds</th> <!-- Col. E -->
<th style="mso-protection:locked visible; width:0px;">Extension</th> <!-- Col. F -->
<th style="mso-protection:locked visible; width:170px;">DateToRegister</th> <!-- Col. G -->
<th style="mso-protection:locked visible; width:170px;">Notes</th> <!-- Col. H -->
<th style="mso-protection:locked visible; width:170px;">CPRExpDate</th> <!-- Col. I -->
<th style="mso-protection:locked visible; width:200px;">AdminNotice</th> <!-- Col. J -->
<th style="mso-protection:locked; width:0px;">DataValidation</th> <!-- Col. K -->
</tr>
从那里我们继续使用包含电子表格数据的常规HTML表格。
我发现one other question在这里看起来很近,并尝试了各种代码的排列,没有运气。
<x:dataValidations count="1">
<x:dataValidation type="list" showInputMessage="1" showErrorMessage="1" sqref="G:G">
<x:formula1>$K$2:$K$34</x:formula1>
</x:dataValidation>
</x:dataValidations>
添加<x:DataValidations count="1">
包装器(如下所示)可以删除阻止工作表打开的错误消息,但不会在Office 2010中启用数据验证(仍然尝试使用VM或其他内容确保这不会破坏Office 2007的那些。)
<x:DataValidations count="1">
<x:DataValidation>
<x:Range>G:G</x:Range>
<x:Type>List</x:Type>
<x:Value>$K$2:$K$34</x:Value>
<x:InputMessage>Select Date from list</x:InputMessage>
<x:ErrorMessage>You must select a date from the list. Press 'Cancel' to continue.</x:ErrorMessage>
</x:DataValidation>
</x:DataValidations>
<小时/> 的总结:
这让我们回到原来的问题:我可以做出哪些最简单的更改,以保持这些工作表的正常运行? (整个系统在另外8到10个月内退役,它不一定是最漂亮的修复)
总有其他选择(复制/粘贴模板,并通过Jet ODBC将数据填充到数据中),但是这种事情需要花费大量的工作才能在不久的将来消失。
<小时/> 1 我很高兴成为一名不在我们IT部门的程序员 - 它有其优点和缺点。我之所以提到只是因为一些可暗示的选项可能超出我的修改范围,但有足够的证据我可以说服IT改变。
答案 0 :(得分:1)
将此作为占位符 - 由于工作压力,如果在我周二早上工作时没有工作选项,我将不得不编写一个新程序:
它会把一切推回去,但我没有时间可用:(
答案 1 :(得分:0)
尝试使用R1C1表示法定义范围。我在Excel 2013上并保存了一个带有数据验证的文件作为XML Spreadsheet(2003版本,因此它可能没有相同的语法)。以下是单元格C3上的数据验证示例,可接受的值定义为E3:E5:
<DataValidation xmlns="urn:schemas-microsoft-com:office:excel">
<Range>R3C3</Range>
<Type>List</Type>
<Value>R3C5:R5C5</Value>
</DataValidation>
就像我说的,我会坚持你一直使用的语法,但尝试用R1C1替换A1单元格符号。