2011-05-06 21 views

回答

0

我已經體驗過一次。我在寫我的Excel表格時打開Excel文件。所以,我已經通過提出文件打開來解決它,直到完成保存操作。

0

這只是一個猜測,但它使我在過去的悲傷......

有在Excel中(也許還有其他辦公產品)的錯誤使用另一種文化比英語調用方法時給出了這樣的錯誤代碼。

處理這個問題的正確方法是改變文化:

CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture; 
try { 
    // use excel here 
} finally { // restore culture 
    Thread.CurrentThread.CurrentCulture = oldCulture; 
} 

我寫了一個類來幫助這個。你可以使用它作爲這樣的:

using(new RunInCulture.English) { 
    // use excel here 
} 

而這裏的代碼:

public class RunInCulture : IDisposable 
{ 
    CultureInfo _oldCulture; 

    public RunInCulture(string culture) 
     : this(CultureInfo.GetCultureInfo(culture)) 
    { 
    } 

    public RunInCulture(CultureInfo culture) 
    { 
     _oldCulture = Thread.CurrentThread.CurrentCulture; 
     Thread.CurrentThread.CurrentCulture = culture; 
    } 

    public static RunInCulture Invariant 
    { 
     get 
     { 
      return new RunInCulture(CultureInfo.InvariantCulture); 
     } 
    } 

    public static RunInCulture English 
    { 
     get 
     { 
      return new RunInCulture("en-US"); 
     } 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    private void Dispose(bool disposing) 
    { 
     if (disposing) 
      Thread.CurrentThread.CurrentCulture = _oldCulture; 
    } 

    ~RunInCulture() 
    { 
     Dispose(false); 
    } 

} 

public class EnglishCulture : RunInCulture 
{ 
    public EnglishCulture() 
     : base("en-US") 
    { 
    } 
} 
0

我解決了這個問題,改變我引用需要保存工作簿的方式。

路1

var wkb = excelInstance.Workbooks[1]; 
wkb.SaveAs(targetReportPath); 
// This works 

路2

excelInstance.ThisWorkbook.SaveAs(targetReportPath); 
// This fails...