Я пытаюсь автоматизировать Excel для сохранения файлов Excel в PDF, но мне нужно изменить языковой стандарт файла Excel во время выполнения на в соответствии с требованиями к числу и формату даты .
До сих пор я пытался установить языковой стандарт для потока, в котором выполняется Interop, но это не работает: никаких изменений в файле Excel, языковой стандарт по-прежнему совпадает с языком операционной системы Windows.
Мне нужно изменить локаль во время выполнения. Я создаю конвертер Excel в pdf для своей компании, чтобы сотрудники могли отправлять свои файлы Excel. Для Windows, в которой будет установлен конвертер, задано значение по умолчанию для английского языка США. Проблема заключается в том, что некоторые файлы Excel создаются в английских локалях за пределами США, где необходимо сохранить форматы чисел и дат. Например, у меня есть файл Excel, созданный с использованием литовского языка с форматом даты, например 2019-01-23. Если файл будет передан конвертеру в системе с английским языком в США, дата будет изменена на 23.01.19 в файле PDF.
У меня есть идея разрешить работникам отправлять файл 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();
}
}