我正在尝试使Excel自动化以将Excel文件保存为PDF,但是我需要在运行时将Excel文件的语言环境更改为满足编号和日期格式的要求。
到目前为止,我所尝试的是设置执行Interop的线程语言环境,但是该方法不起作用:Excel文件中没有任何更改,该语言环境仍然是Windows操作系统的语言环境。
我需要在运行时更改语言环境。我正在为我的公司构建一个Excel到pdf转换器,以允许工作人员提交他们的Excel文件。将在其上安装转换器的Windows设置为默认的美国英语语言环境。问题是,某些Excel文件是在非美国英语语言环境中创建的,其中应保留数字和日期格式。例如,我有一个使用立陶宛语区域设置创建的Excel文件,其日期格式为2019-01-23。如果将文件提交给具有美国英语语言环境的系统上的转换器,则日期将在PDF文件中更改为01/23/19。
我的想法是允许工作人员与区域设置一起提交Excel文件以保留日期和数字格式。
剩下要解决的唯一问题是如何动态更改Excel Interop区域设置?
var theNewThread = new Thread(() =>
{
Excel(@"C:\Projects\TestFiles\test-locale.xlsx", @"C:\Projects\_temp\excel.pdf");
});
theNewThread.CurrentCulture = new CultureInfo("pt-BR");
theNewThread.CurrentUICulture = new CultureInfo("pt-BR");
theNewThread.Start();
private static void Excel(string inFilePath, string outFilePath)
{
var application = new Microsoft.Office.Interop.Excel.Application();
application.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
var workbook = application.Workbooks.Open(inFilePath, ReadOnly: Microsoft.Office.Core.MsoTriState.msoTrue);
try
{
workbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, outFilePath);
}
finally
{
if (workbook != null)
{
workbook.Close();
}
application.Quit();
}
}