我使用下面的代码来获取正在运行的MS Word实例.
我现在有一个编译问题'使用未分配的局部变量"oWord"'
这是我的代码:
Microsoft.Office.Interop.Word._Application oWord ;
try
{
// Is Word running?
oWord = Marshal.GetActiveObject("Word.Application") as Microsoft.Office.Interop.Word.Application; // ApplicationClass;
}
catch (COMException ce)
{
if (ce.ErrorCode == unchecked((int)0x800401E3))
// No, Word not in ROT, start a new instance
oWord = new Microsoft.Office.Interop.Word.Application();
}
// Use instance referened by _WordApp
oWord.ScreenUpdating = false; // < PROBLEM HERE
object objDefaultBehaviorWord8 = WdDefaultTableBehavior.wdWord8TableBehavior;
object objAutoFitFixed = WdAutoFitBehavior.wdAutoFitFixed;
//MAKING THE APPLICATION VISIBLE
oWord.Visible = Properties.Settings.Default.DebugMode;
oWord.DisplayAlerts = WdAlertLevel.wdAlertsNone;
Run Code Online (Sandbox Code Playgroud)
但在我看来oWord 被分配了,我猜测编译器正在查看我的Try..Catch块并说我已经取消了oWord
那么分配这个的正确方法是什么?
如果Marshal.GetActiveObject
调用失败,它可能永远不会被分配,但错误代码不是unchecked((int)0x800401E3)
.
oWord
首次声明时需要设置为:
Microsoft.Office.Interop.Word._Application oWord = null;
Run Code Online (Sandbox Code Playgroud)
要么
Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
Run Code Online (Sandbox Code Playgroud)
我可能会做后者.这也消除了在线下进行空检查的需要,现在你真的应该拥有,因为如果在try/catch块中捕获到异常,你就不会完全中止.
(话虽如此,如果这样做,实际上将启动Word如果它尚未运行,去的第一个选项,然后确定oWord
是不是仍然在try/catch语句后空.)
归档时间: |
|
查看次数: |
626 次 |
最近记录: |