2013-03-19 77 views
0

下面是我的代码,我复制工作表,并保存为新的文件,它实际上节省了没有我的地方,我们有环境 Office 2003的宏,在Windows Server 2003C#:工作簿另存为以宏保存在它

但在服务器将其与宏扑救,我不想 环境中的Office 2003,Windows Server 2008的

C#:

try 
      { 
       wBook = xCel.Workbooks.Open(ExcelPath);     
       wSheet = (Excel.Worksheet)wBook.Worksheets.get_Item(1);      
       wSheet.Copy(Type.Missing, Type.Missing);      
       wSheet = (Excel.Worksheet)wBook.Sheets[1]; 
       wSheet.SaveAs(ExcelCopyPath); 
      } 

      catch {} 
      finally 
      {     
       if (wBook != null) 
       {      
        wBook.Close(); 
        wSheet = null; 
        wBook = null; 
        Thread.Sleep(500); 
       } 
       if (Excel.ProcessID > 0) 
       { 

        Process pxCel = Process.GetProcessById(Excel.ProcessID); 
        pxCel.Kill(); 
       } 

       GC.Collect(); 
       GC.WaitForPendingFinalizers(); 
       GC.Collect(); 
       GC.WaitForPendingFinalizers();     
       try { Marshal.FinalReleaseComObject(wSheet);} 
       catch {}           
       try { Marshal.FinalReleaseComObject(wBook);} 
       catch {}     
      } 

请检查我的问题......并提出了一些答案。 感谢

回答

0

登录你的异常,像这样:

try 
{ 
    wBook = xCel.Workbooks.Open(ExcelPath);     
    wSheet = (Excel.Worksheet)wBook.Worksheets.get_Item(1);      
    wSheet.Copy(Type.Missing, Type.Missing);      
    wSheet = (Excel.Worksheet)wBook.Sheets[1]; 
    wSheet.SaveAs(ExcelCopyPath); 
} 

catch(Exception ex) 
{ 
    using(var sw = new StreamWriter(@"C:\temp\mylog.txt", true)) 
    { 
     sw.WriteLine("First catch block"); 
     sw.WriteLine(ex.Message); 
    } 
} 
finally 
{     
    if (wBook != null) 
    {      
     wBook.Close(); 
     wSheet = null; 
     wBook = null; 
     Thread.Sleep(500); 
    } 
    if (Excel.ProcessID > 0) 
    { 

     Process pxCel = Process.GetProcessById(Excel.ProcessID); 
     pxCel.Kill(); 
    } 

    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
    GC.Collect(); 
    GC.WaitForPendingFinalizers();     
    try { Marshal.FinalReleaseComObject(wSheet);} 
catch(Exception ex) 
{ 
    using(var sw = new StreamWriter(@"C:\temp\mylog.txt", true)) 
    { 
     sw.WriteLine("Second catch block"); 
     sw.WriteLine(ex.Message); 
    } 
}          
    try { Marshal.FinalReleaseComObject(wBook);} 
catch(Exception ex) 
{ 
    using(var sw = new StreamWriter(@"C:\temp\mylog.txt", true)) 
    { 
     sw.WriteLine("Third catch block"); 
     sw.WriteLine(ex.Message); 
    } 
}    
} 

你真的应该使用像NLOG日志框架,但这应该帮助你在短期内。这不会解决您的问题,但至少现在您可以打开C:\temp\mylog.txt并查看出了什么问题,这将有助于您诊断问题。有了空的catch块,你将永远无法解决问题,因为你永远无法弄清楚出了什么问题。

相关问题