请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

laonawuli

银牌会员

39

主题

146

帖子

3383

积分

银牌会员

积分
3383

活字格认证

laonawuli
银牌会员   /  发表于:2012-3-12 08:27  /   查看:9346  /  回复:10
首先把一个Sheet的 DataAutoCellTypes=false, DataAutoHeadings =false.
然后,从Oracle中获得一个数据集,其中一列的类型是时间日期类型的。
然后绑定Sheet的DataSource。
然后设置每列的CellType=new TextCellType();
此时,数据显示都是没问题的,日期也可以正常显示如:2010/8/7 14:08:07
然后使用这个方法导出成xls文件:
fpMain.SaveExcel(sd.FileName, FarPoint.Excel.ExcelSaveFlags.SaveBothCustomRowAndColumnHeaders);
结果,导出的xls文件中,时间日期类型的那列,值变成了很诡异的格式,
类似于40397.58897 。
为了方便查明原因:我提供两组数据给你看:
2010/8/7 14:08:07 变成了40397.58897
2010/8/7 14:29:12 变成了40397.603611


这是咋回事啊,是我设置的有问题吗?

10 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-3-12 12:16:00
沙发

回复 1# laonawuli 的帖子

laonawuli 你好,
该问题我已经重现,两种解决方案:

1.将日期列单元格类型设置为 DateTimeCellType 再导出。

2.设置 Sheet 下属性 Protect 为 false。

  1. this.fpSpread1.Sheets[0].Protect = false;
复制代码
导出之后在 Excel 中把该列修改为 DateTime 格式。
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-12 15:38:00
板凳
原帖由 iceman 于 2012-3-12 12:16:00 发表
laonawuli 你好,
该问题我已经重现,两种解决方案:

1.将日期列单元格类型设置为 DateTimeCellType 再导出。

2.设置 Sheet 下属性 Protect 为 false。

  1. this.fpSpread1.Sheets[0].Protect = false;
复制代码
导出之后在 Excel 中把该列修改为 DateTime 格式。


hello,iceman,请问如果选择设置为DateTimeCellType,怎么才能保证这一列的与数据库中查出来的格式一摸一样?其实我之所以换成TextCellType,就是觉得AutoDataCellType不好控制。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-12 16:36:00
地板

回复 3# laonawuli 的帖子

laonawuli :
DateTimeCellType  下属性 UserDefinedFormat 可以自定义日期显示格式,下面是简单示例:
  1. FarPoint.Win.Spread.CellType.DateTimeCellType dt = new FarPoint.Win.Spread.CellType.DateTimeCellType();
  2. string[] dNames = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
  3. string[] mNames = {"Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec",""};
  4. string[] sdNames = {"SU", "M", "T", "W", "TH", "F", "S"};
  5. string[] smNames = {"J", "F", "M", "A", "MY", "J", "JY", "AG", "S", "O", "N", "D",""};
  6. string okbutn = "Accept";
  7. string canbutn = "Decline";
  8. dt.DateTimeFormat = FarPoint.Win.Spread.CellType.DateTimeFormat.UserDefined;
  9. dt.UserDefinedFormat = "dddd  MMMM d,  yyyy";
  10. dt.DayNames = dNames;
  11. dt.MonthNames = mNames;
  12. dt.ShortDayNames = sdNames;
  13. dt.ShortMonthNames = smNames;
  14. dt.SetCalendarText(okbutn, canbutn);
  15. fpSpread1.ActiveSheet.Cells[0, 0].CellType = dt;
  16. fpSpread1.ActiveSheet.Cells[0, 0].Value = System.DateTime.Now;
  17. fpSpread1.ActiveSheet.Columns[0].Width = 130;
复制代码
当然也有默认格式 DateTimeFormat  ,具体情况具体分析哈。

以上帮助文档中都有详细说明。
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-12 16:56:00
5#
原帖由 iceman 于 2012-3-12 16:36:00 发表
laonawuli :
DateTimeCellType  下属性 UserDefinedFormat 可以自定义日期显示格式,下面是简单示例:
[code]
FarPoint.Win.Spread.CellType.DateTimeCellType dt = new FarPoint.Win.Spread.CellType.DateTimeCellType();
string[] dNam


iceman,我按照你说的,直接将时间日期列的CellType设置成了 new DateTimeCellType();
但是长日期会变成短日期

例如 2010/8/7 14:08:07  变成了 2010/8/7。

怎么不用设置显示格式,就可以自动和数据库查出的值的格式相匹配呢?
因为我做的只是一个报表工具,我也无法确定用户查出来的日期到底是什么格式的。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-12 17:47:00
6#

回复 5# laonawuli 的帖子

laonawuli :-D
可以尝试把日期格式设置成


  1.                 FarPoint.Win.Spread.CellType.DateTimeCellType dateCellType = new FarPoint.Win.Spread.CellType.DateTimeCellType();
  2.                 dateCellType.DateTimeFormat = FarPoint.Win.Spread.CellType.DateTimeFormat.LongDateWithTime;
  3.                 this.fpSpread1.Sheets[0].Columns[0].CellType = dateCellType;
复制代码
这样无论读入什么格式的日期数据,都可以自动格式化为长日期格式。
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-12 18:45:00
7#
原帖由 iceman 于 2012-3-12 17:47:00 发表
laonawuli :-D
可以尝试把日期格式设置成[code]

                FarPoint.Win.Spread.CellType.DateTimeCellType dateCellType = new FarPoint.Win.Spread.CellType.DateTimeCellType();
                dateCellType.Dat

可是,万一人家写的SQL查出来的是短日期的呢?不就废废了
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-13 16:52:00
8#
iceman~~呼唤你~
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-13 17:10:00
9#

回复 8# laonawuli 的帖子

laonawuli ,因为 Column 的单元格类型固定,所以没有办法自动识别长短日期格式。只能根据数据库中的日期格式,进行不同的单元格类型设置了。
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-13 20:29:00
10#
原帖由 iceman 于 2012-3-13 17:10:00 发表
laonawuli ,因为 Column 的单元格类型固定,所以没有办法自动识别长短日期格式。只能根据数据库中的日期格式,进行不同的单元格类型设置了。


好的 多谢iceman!按照你说的方法,我搞定了:)
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部