将页面导出为Excel时间格式的问题

电脑杂谈  发布时间:2020-06-25 15:27:05  来源:网络整理

jsp分页显示页面跳转_jsp页面显示时间格式_jsp页面显示时间格式

现象:

是这种情况. 公司的系统添加了一项新功能,该功能允许用户在页面上生成报告时选择自己喜欢的时间格式. 有四种时间格式可供选择:

默认选项: yyyy-mm-dd

描述性(07年1月1日)

短日期: 年/月/日

短日期: dd / mm / yy

此外,用户可以选择报告是页面格式还是导出为Excel文件. 原始处理显示页面上的时间格式没有问题,但是昨天我发现如果导出Excel,则时间格式有误: (

原因:

经过长时间的探索,我终于有了一些线索. 以下是我首先发现的有关信息:

---------------------------甚至传说中的华丽分隔线Lala ~~~ --------- --------------------

当我们将网页上的数据导入excel格式时,有时我们的数据需要以特定的格式显示,这时我们需要向单元格中添加一些样式规范.

jsp页面显示时间格式_jsp页面显示时间格式_jsp分页显示页面跳转

首先,让我们了解从网页导出excel的原理. 当我们将数据发送给客户端时,我们希望客户端程序(浏览器)以excel格式读取数据,因此将MIME类型设置为: application / vnd.ms-excel,当excel读取文件时数据将以每个单元格的格式. 如果该单元格没有规定的格式,Excel将以默认格式显示该单元格的数据. 这为我们提供了自定义数据格式的空间,当然,我们必须使用excel支持的格式. 以下是一些常用格式:

1)文本: vnd.ms-excel.numberformat: @

2)日期: vnd.ms-excel.numberformat: yyyy / mm / dd

3)数字: vnd.ms-excel.numberformat: #,## 0.00

4)货币: vnd.ms-excel.numberformat: ¥#,## 0.00

5)百分比: vnd.ms-excel.numberformat: #0.00%

您还可以自定义这些格式. 例如,您可以将年和月定义为: yy-mm等. 因此,了解这些格式后,如何将这些格式添加到单元格中?非常简单,我们只需要将样式添加到相应的标签对(即封闭标签)即可. 例如, jsp页面显示时间格式,将样式添加到标签对 中,如下所示:

410522198402161833

类似地,我们还可以向

添加样式jsp页面显示时间格式,或向 ,添加样式,这会引起问题,您注意到了吗?首先看下面的代码:

jsp页面显示时间格式_jsp页面显示时间格式_jsp分页显示页面跳转

542

0.25

是的,当我们同时向父标签对和子标签对添加样式时,数据将以哪种样式显示?经过测试后,它将以最接近数据的样式呈现,这也符合我们的意愿(这似乎与一句话相符: 县官员不如当前官员). 可以通过更改样式来更改数据在Excel中的显示方式(这些样式规范可以添加到首页或背景代码中,以将这些样式添加到相应的控件中,例如: DataGrid等). 如果您的应用程序相对简单,则足以满足您的需求. 但是,如果您的应用程序更复杂,那么您还可以采用一种方法来实现不同的数据表示效果. 下面,我将引用一个稍微复杂的应用程序.

例如: 您的数据应该呈现给不同国家和地区的用户,这样呈现的数据格式将有所不同,那么我们如何解决这个问题?当然,您可以手动处理这些数据,但这毕竟不是最佳方法,因为如果我们添加其他国家或地区的用户,则我们需要以客户要求的格式处理所有数据. 当数据量很大时,这无疑是非常繁琐的工作. 那么我们应该如何解决这样的问题呢?让我说说我的看法: 程序运行时,将这些格式化的信息提取到xml文件中,根据不同的客户端读取不同的格式化信息,然后将这些格式化的信息动态添加到我们的数据中. 添加来自其他国家或地区的用户,我们只需要再添加一个xml文件,将相应的格式设置信息写入此xml文件中,然后从该国家或地区查看用户时,只需读取相应的格式设置信息并应用即可数据.

上面的例子突然传给我. 我相信跨国公司的公司也会遇到类似的问题. 解决方案只是为您提供一个想法,希望能发挥作用.

DataGrid:

在Asp.Net WebForm中导出DataGrid时,它位于ItemDataBound中

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

{

jsp页面显示时间格式_jsp页面显示时间格式_jsp分页显示页面跳转

e.Item.Cells [0] .Attributes.Add(“ style”,“ vnd.ms-excel.numberformat: @”);

}

如果您使用WinForm,则可以

Excel.Range range =(Excel.Range)worksheet.Cells [1,1];

range.NumberFormat = Excel.XlParameterDataType.xlParamTypeUnknown;

VB:

如果e.Item.ItemType = ListItemType.Item或e.Item.ItemType = ListItemType.AlternatingItem然后

e.Item.Cells(1).Attributes.Add(“ style”,“ vnd.ms-excel.numberformat: @”)

如果结束

如果它是标签,则添加

的样式:

jsp页面显示时间格式_jsp分页显示页面跳转_jsp页面显示时间格式

如果是Gridview,(07.12.13更新)

您需要在后台打印单击事件代码中添加两个句子:

//更多代码

字符串样式= @“ <样式> .text {mso-number-format: \ @;} ”;

Response.Write(style);

Response.Output.Write(oStringWriter.ToString());

--------------------------------------------------- ----------------

以下内容开始处理此问题的过程:

首先,按照上述文章所述,将样式属性添加到

标记中,然后根据用户选择的时间格式进行设置:

...

然后开始测试. 因此,前三种时间格式都可以. 最后一个: dd / mm / yy,有些时候是正确的,有些是错误的,而所有错误都是dd> 12的时间. 为什么会这样呢?经过反复测试,我终于弄清楚了: 事实证明,当我们使用导出的数据到Excel时,Excel会停止它!不仅如此,无论您输入哪种格式,我们都可以尝试在Excel中输入时间,这会将时间强制为mm / dd / yyyy格式. 当我将过去的日期(例如: 30/10/08)传递给它时,它是愚蠢的,因为它不知道,并且当它显示在单元格中时,它也会诚实地显示为30/10/08,这是歪曲的(实际上是错误的). 但是如果它是1/10/08(我转换的dd / mm / yy格式)怎么办?可以忽略不计,认为此(1/10/08)是mm / dd / yy格式,无论三七二十一转换为1/10/2008,请注意,此(1/10/2008)表示2008年1月10日,我完全偏离了意愿: (

忘了说些什么,当我们从中取出日期数据时,我们将根据用户选择的格式(上面列出的4种格式)对其进行格式化. 目前,我想到了一个技巧,即,如果用户选择dd / mm / yy的格式,则我不会将日期格式设置为dd / mm / yy,而是将mm / dd / yy格式化,以便当数据到达Excel可以区分. 同时,由于我指定了

的样式属性,因此excle将严格按照该格式显示(无论Excel中显示的时间格式如何,当您编辑时间时,您都会看到可以编辑的格式为始终为mm / dd / yyyy.

至此,问题已得到令人满意的解决.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-258018-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...