在C#中使用excelcnv.exe或ofc.exe将.xls转换为.xlsx

时间:2018-08-30 06:45:36

标签: c# .net excel iis

我正在尝试使用c#代码运行'EXE'将.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文件。我什至使用事件处理程序进行输出,但结果为null。进程将进入不确定状态。

但是,如果我通过控制台应用程序运行它,则该文件成功转换了文件,并且在运行该文件以转换多个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();

与此代码相同。通过控制台应用程序运行时,它可以正常工作并按预期进行转换。

当使用IIS托管的w3wp进程运行时,它无法转换为.xlsx,但是在任务管理器中创建进程并且日志文件为空。

即使将IIS_IUSRS权限授予“ EXE”位置,它也不起作用,但可以在控制台应用程序中工作。

有什么想法为什么会发生这种情况,以及如何解决它?

1 个答案:

答案 0 :(得分:0)

尝试将w3wp运行用户添加到“管理员”组。它将起作用。

否则,请使用here

提及的内容