【发布时间】:2014-05-10 04:18:04
【问题描述】:
底线:
为了让这些工作表像以前一样正常工作,我可以做哪些最简单的更改? (整个系统将在另外 8 到 10 个月后退役,它不一定是最漂亮的修复)
背景:
我们有一个...较旧的...程序生成一堆 Excel XML/HTML 电子表格。这些工作表是带有“.xls”扩展名的纯文本 XML/HTML。是的,我们得到了数据格式消息,需要使用它的人可以继续使用该消息。
自从我们将 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>
剪掉更多内容以找到实际导致错误的部分:(有一些额外的上下文,cmets 不在原版中)
</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 做出改变。
【问题讨论】:
-
您是否尝试过 Office2010 的以下修补程序? support.microsoft.com/kb/2553436?我没有安装Office2010。所以我不能自己测试修复。
-
@Hans - 我没有机会尝试。 [插入苦笑] 在新的设置中,我没有足够的权限来安装任何东西,而且由于最近的大雨,IT 部门被淹没在他们的办公室,他们现在有点心事重重。 ..
标签: excel ms-office openxml validation