在.NET 4.0中使用Process.Start()打开Excel文件失败

3

最近,一个使用 .Net 1.1 的旧项目正在迁移到 .Net4.0。该项目使用以下方法打开 Excel 文件:

Process process = new Process();

try
{
  process.StartInfo.FileName = marco_file;
  process.Start();
}
catch(Exception)
{
}
finally
{
  process.Close();
}

marco_file是带有宏的Excel文件的路径,例如"C:\project\test.xls"。当打开Excel文件时,其中的宏将立即运行。

在.Net1.1中,代码和宏都可以正常运行。在.Net4中,代码可以正常运行而没有异常。但宏无法工作。

为什么Excel文件中的宏没有运行?

我的环境是Win7 64位。Office 2010 64位。IIS 7.5

谢谢。

当我更改为以下代码并运行调试模式时

process.StartInfo.FileName = marco_file;
if (process.Start())
{
    Debug.WriteLine("-->start ");
}
else
{
    Debug.WriteLine("-->failed ");
}

结果是进入了 else 块,这意味着该进程启动失败。
有人知道为什么吗?

3
你确定你的代码没有抛出任何异常吗?你似乎在“吃掉”它们。 - Jay Riggs
移除 catch{},然后再试一次,这样你就可以看到是否抛出异常以及它是什么。 - Mathieu
尝试使用"try writing it as catch(Exception ex) { // print exception }"代替仅使用"catch(Exception)"。 - Bahamut
问题已经解决! - macemers
1个回答

0

检查 Excel 中的安全性。默认情况下,打开包含宏的工作簿时,Excel 2010 将禁用宏,您必须明确启用它们。

要启用宏,您需要前往:

File tab on the ribbon => Options
                       => Trust Center
                       => Trust Center Settings...
                       => Macro Settings

唯一可以让宏自动运行的选项是:

Enable all macros (not recommended; potentially dangerous code can run)

注意警告。


安全设置最低。启用所有宏。 - macemers
如果您直接打开文件,该宏是否会自动运行? - Andrew Cooper
是的。如果我打开它,它会自动运行。 - macemers
你的代码是只打开文件而不运行宏,还是根本不打开文件? - Andrew Cooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接