Изменить локаль Excel Interop - PullRequest
       9

Изменить локаль Excel Interop

0 голосов
/ 22 января 2019

Я пытаюсь автоматизировать 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();
            }
        }
...