Преобразование .xls в .xlsx с использованием excelcnv.exe или ofc.exe в C # - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь запустить 'EXE', используя код c # для преобразования .xls в .xlsx. Он работает успешно и работает как положено, если я использую консольное приложение или cmd.

Но когда я запускаю его на стороне сервера (код, размещенный в IIS, т. Е. Код выполняется с использованием рабочего процесса w3wp.exe), он не может конвертировать файлы в .xlsx

Сначала я использовал Excelcnv.exe для преобразования

if (System.IO.File.Exists(pstrIPDTemplatePath))
            {
                string pstrOpenXMLIPDTemplatePath = pstrIPDTemplatePath.Replace(".xls", ".xlsx");
                string processArguments = "-oice \"" + pstrIPDTemplatePath + "\" \"" + pstrOpenXMLIPDTemplatePath + "\"";
                ProcessStartInfo Excelcnv = new ProcessStartInfo();
                Excelcnv.FileName = mstrExcelCnvExePath;
                Excelcnv.Arguments = processArguments;
                Process.Start(Excelcnv);
            }

Он успешно конвертировал несколько файлов, но для нескольких файлов он создает процесс excelcnv.exe * 32 в диспетчере задач, но не конвертирует файл Excel. Я даже использовал обработчики событий для вывода, но результат нулевой. Процесс переходит в неопределенное состояние.

Но если я запускаю его через консольное приложение, оно успешно конвертировало файл, после запуска также появлялось диалоговое окно для конвертации нескольких файлов, которые Excel не запускал правильно, и с вопросом, запускаться ли в безопасном режиме.

Чтобы избежать этой проблемы безопасного режима, я пытался использовать ofc.exe

Итак, я использовал ofc.exe для преобразования, как показано ниже:

Process prc = new Process();
prc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
prc.StartInfo.FileName = @"OFC.exe";
prc.StartInfo.Arguments = @"ofc.ini";
prc.StartInfo.UseShellExecute = false;
prc.StartInfo.RedirectStandardOutput = true;
prc.Start();

То же самое с этим кодом. Он работает успешно и конвертируется, как и ожидалось, при запуске через консольное приложение.

Невозможно преобразовать в .xlsx, но процесс создается в диспетчере задач, а файл журнала пуст при запуске с использованием процесса w3wp, размещенного в IIS.

Даже после предоставления IIS_IUSRS разрешения на местоположение 'EXE', оно не работает, но работает в консольном приложении.

Есть идеи, почему это происходит, и как обойти это?

1 Ответ

0 голосов
/ 10 сентября 2018

Попробуйте добавить своего работающего пользователя w3wp в группу «Администратор». Это будет работать.

В противном случае используйте это, которое упоминается здесь

...