旧系统使用 Excel 2003,因此我不能使用任何更新的第三方产品,因为它们适用于 2007 年及更高版本,并且留下了旧的 XML 电子表格创建系统。
我现在需要修改 Excel 中的单元格格式,以便数字是数字、日期是日期等......因为目前所有内容都在 Excel 中格式化为常规。
我已经扫描了网络并在部分视图中尝试了以下编码,以仅具有样式和工作簿部分:
<ss:Style ss:ID="MyTime">
<NumberFormat ss:Format="Long Time" />
</ss:Style>
<ss:Style ss:ID="MyNumber">
<NumberFormat ss:Format="General Number" />
</ss:Style>
这在 XML 输出文件中表示,它是
<Cell ss:StyleID='MyNumber'><Data ss:Type='Number'>419,717,200</Data></Cell>
这是在主视图中创建的,并使用以下命令逐行构建:
private static IHtmlString ToXmlColumn(string columnContent, string ssType, string ssFormat)
{
return MvcHtmlString.Create(string.Format("<Cell ss:StyleID='{2}'><Data ss:Type='{1}'>{0}</Data></Cell>", SecurityElement.Escape(columnContent), ssType, ssFormat));
}
下载使用application/vnd.ms-excel的基础
public ExcelActionResult(string fileName, TModel model, ControllerContext context, string viewName = null)
: base("application/vnd.ms-excel")
{
_context = context;
_model = model;
_viewName = viewName ?? (string)_context.RouteData.Values["action"];
FileDownloadName = fileName;
}
但是,当我下载 xls 并在 Excel 2003 中重新打开它时,所有单元格格式仍然是通用的。
我错过了什么或我做错了什么?
此代码在系统中无处不在,因此我正在寻找修复或解决方法,而不是需要重写它或使用 XML 输出来创建 XSD 和映射,因为截止日期太紧了,我无法做到这一点。
因为我可以在底部正式回答我自己的问题,所以这里是答案:
如果其他人需要找到类似的东西,我会自己回答。
在此处查找要使用的自定义代码:
http://office.microsoft.com/en-gb/excel-help/number-format-codes-HP005198679.aspx
但我会考虑替换这个:
<ss:Style ss:ID="MyTime">
<NumberFormat ss:Format="Long Time" />
</ss:Style>
<ss:Style ss:ID="MyNumber">
<NumberFormat ss:Format="General Number" />
</ss:Style>
如果想要一个数字,请使用以下内容
<ss:Style ss:ID="MyTime">
<NumberFormat ss:Format="HH:MM:SS" />
</ss:Style>
<ss:Style ss:ID="MyNumber">
<NumberFormat ss:Format="0" />
</ss:Style>
如果希望 12000 在自定义而不是常规中显示为 12,000.00 或低于
<ss:Style ss:ID="MyNumber">
<NumberFormat ss:Format="#,##0.00" />
</ss:Style>
我花了一整天的时间在互联网上寻找以上内容,所以我会在我发现的任何 XML 电子表格查询中回答这个问题,因为它很烦人而且也很困难。