为有中文需求的客户提供多渠道中文技术支持.

Tue May 10, 2022 11:35 am

xls 转换 pdf时,日期格式的问题。

我使用Spire.XLS.dll 12.2.0.5020 free edition,做xls转换pdf的评估测试。

发现一个问题,麻烦看一下。
对于日期2016/8/15,在xls中,设定日期格式设为mmm/dd/yy时,xls中显示的是Aug/15/16。
但是转换后的pdf,显示的是 八月/15/16

显示 八月 ,比较奇怪。应该和xls显示的一致,即pdf显示 Aug/15/16

添付是该xls和生成pdf。

bird2008
 
Posts: 5
Joined: Tue May 10, 2022 11:06 am

Wed May 11, 2022 10:25 am

您好,

感谢你的询问。
我这边用微软Excel(2016,2019)打开均显示的是“八月”而不是“Aug”,用WPS打开显示的则是“Aug”。您是用什么软件打开的文档?我们的产品是基于微软Excel的规则,打开显示是中文,使用微软Excel保存到PDF也是中文。

Sincerely,
Kylie
E-iceblue support team
User avatar

kylie.tian
 
Posts: 412
Joined: Mon Mar 07, 2022 2:30 am

Wed May 11, 2022 1:05 pm

非常感谢回答。

我用的是 Microsoft Office 专业增强版 2016

为了避免误解,我把xls显示和office的版本,做了截图,添付了,请查看。

例外,如果用xls的另存为pdf,生成的pdf,能够显示 Aug/15/16。

bird2008
 
Posts: 5
Joined: Tue May 10, 2022 11:06 am

Thu May 12, 2022 11:02 am

您好,

感谢反馈。
这个现象和系统区域文化设置有关系,请在程序中设置Locale.setDefault(Locale.ENGLISH); 我这边验证了此代码可以得到英文Aug。如果还有其他问题,请随时联系。

Sincerely,
Nina
E-iceblue support team
User avatar

Nina.Tang
 
Posts: 1195
Joined: Tue Sep 27, 2016 1:06 am

Thu May 12, 2022 11:17 am

谢谢回答

我用的是c#,参考贵司文档,代码大致如下。
Workbook book = new Workbook();
book.LoadFromFile(XlsFilename);
book.ConverterSetting.SheetFitToPage = true;
book.SaveToFile(PdfFilename, FileFormat.PDF);

请问Locale.setDefault(Locale.ENGLISH) 这代码,对应Workbook类的哪个方法?

bird2008
 
Posts: 5
Joined: Tue May 10, 2022 11:06 am

Fri May 13, 2022 1:43 am

您好,

您可以使用下面的代码在C#中设置当前线程的区域性为英语。
Code: Select all
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-EN");
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Fri May 13, 2022 8:31 am

谢谢回答,我们试了一下,可能达到效果。
但是由于把全局环境设定成en-EN的格式,产生了其他的副作用。
导致xls中的其他日期,xls中显示为2020/1/16(格式YYYY/MM/DD),转换pdf后,成了 1/16/2020

xls和pdf都添付了,xls中有二类日期格式的显示。
如果直接修改全局环境,那么二类日期格式就无法和xls中显示相一致。

还有其他方法解决这个问题吗?

bird2008
 
Posts: 5
Joined: Tue May 10, 2022 11:06 am

Fri May 13, 2022 9:27 am

您好,

感谢您的反馈。

对于您附件中展示的这一情况,这是属于正常现象。您如果将系统区域设置改为英语(即与在C#程序里设置文化线程为英文一样),然后使用微软Excel将文档转换为PDF,您会得到一样的结果。我们产品是基于微软Office的效果来做的,所以我们不会去改变这方面的逻辑。
您如果只是希望同一个文档中能存在两种不同区域环境对应的日期格式的话,这个您可以单独为每个日期设置他们对应的区域信息以达到效果。相关设置如下图。
screenshot.png
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Fri May 13, 2022 12:22 pm

非常谢谢回答。

我可能知道原因了。
在xls中,Aug/15/16 该日期的设定格式为自定义(mmm/dd/yy)。没有区域设置。请参考附件。
由于默认的区域设置是zh-CN,从xls中取出的字符串,即为 八月/15/16
我推测,贵司的程序,直接使用了上述的值 八月/15/16。

但是使用xls的自带的【另存为】保存成pdf后,该pdf中的日期为 Aug/15/16, 和xls显示一致。请参考附件。

我觉得,如下的做法,可能比较好。
对于 自定义的格式(例如mmm/dd/yy),没有区域设置的概念。需要对它的值(从xls中取出的字符串),进行 自定义格式的转换。

bird2008
 
Posts: 5
Joined: Tue May 10, 2022 11:06 am

Wed May 18, 2022 1:26 am

您好,

很抱歉回复迟了。

我反复测试过您提到的情况,发现确实如您所说。产品在处理自定义的“日期”值时,也将它们与真正的“日期”类型做了相同处理。它们都会受到当前区域环境设置的影响而改变,这一点确实与微软Excel转出效果不一致。我已将此问题提交给研发团队进行调查和优化,问题编号是SPIREXLS-3888。有任何更新和进展我会及时反馈给您。感谢您的建议和协助。
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Mon Jun 13, 2022 10:02 am

您好,

感谢您的耐心等待。

很高兴通知您我们刚发布了Spire.Xls的最新版本12.6.1。其中包含了对您之前反馈的问题SPIREXLS-3888的修复和优化。欢迎您下载更新并测试。

官网下载:https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html
Nuget:https://www.nuget.org/packages/Spire.XLS/12.6.1
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Return to 中文技术支持