2016-10-20 4 views
1

私のC#プログラムが生成したExcelファイルを開いて保存する際に問題があります。手動でいくつかの変更を加えてExcelファイルを保存しようとするたびに、このファイルのコピーを保存するようにポップアップメッセージが表示されるのは、読み取り専用なのでです。それは大丈夫ですが、迷惑です。私のExcelファイルは私のC#プログラムによって作成されています。ここに私のコードスニペットは、次のとおりです。C#で生成されたワークシートは読み取り専用でロックされています

/** 
    * Save the matched data 
    * */ 
    public void saveMatch(List<String> saveB, List<String> saveG, Excel.Worksheet bellSheet, Excel.Worksheet GSMSheet, String fileurl, String mCode, String prioName,int sNumber = 0) 
    { 
     object misValue = System.Reflection.Missing.Value; 
     Excel.Application newApp = new Excel.Application(); 
     Excel.Workbook newWB = newApp.Workbooks.Add(misValue); 
     Excel.Worksheet newWS = newWB.Worksheets.get_Item(1); 
     String colName1 = bSheet.get_Range("A1").Cells.Value; 
     String colName2 = GSheet.get_Range("A1").Cells.Value; 

     int i = 2;//start copy from row two of the Sheet, row one is the column name 
     newWS.Cells[1, 2] = colName2;//copy the column name 
     newWS.Cells[1, 1] = colName1;//copy the column name 


     //Copy excatly matching data 
     for (int j = 0; j < saveB.Count; j++) 
     { 
      newWS.Cells[i, 1] = saveB[j]; 
      newWS.Cells[i, 2] = saveG[j]; 

      //Console.WriteLine(saveG[j] + " : " + saveB[j]); 
      i++; 
     } 
     if (sNumber==0) 
     { 
      if (prioName.Equals("None")) 
      { 
       newWB.SaveAs(fileurl + @"\MdResults_" +"None_"+ mCode + ".xlsx"); 
      } 
      else 
      { 
       newWB.SaveAs(fileurl + @"\MdResults_" + prioName+"_"+mCode + ".xlsx"); 
      } 
     } 
     else 
     { 
      if (prioName.Equals("None")) 
      { 
       newWB.SaveAs(fileurl + @"\MdResults_" + "None_"+mCode + "_" + sNumber + ".xlsx"); 
      } 
      else 
      { 
       newWB.SaveAs(fileurl + @"\MdResults_" +prioName + "_"+mCode + "_" +sNumber + ".xlsx"); 
      } 
     } 
     newWB.Close(0); 
     newApp.Quit(); 

プログラムでは、[OK]を実行し、私は正常に保存されたExcelファイルを開くことができます。私はC#コードで何かが欠落していると思いますか、Excelファイル自体を変更する必要がありますか?私は、私のプログラムで生成されたExcelファイルを、通常のように修正して、コピーとして保存するようにポップアップメッセージを表示せずに保存できるようにしたい。助けてくれてありがとう。

答えて

2

newAppを終了しないと、Excelプロセスがメモリ内に留まり、ファイルがロックされたままになります。

タスクリストを確認して、これが起こっていることを確認します。はい、あなたは正しいです

newApp.Close(0); 
newApp.Quit(); 
+0

あなたのファイルを保存した後、以下を追加し

してみてください。これは私のプログラムの別の問題です。しかし、私は実際にはnewWB.Close(0); newApp.Quit();私のプログラムで。しかし、newApp.Close(0)(私の質問で私のコードスニペットを編集しました。)しかし、問題はまだ発生します。 newWB.Close(0)の代わりにnewApp.Close(0)を使用することで大きな違いはありますか? –

+0

私は完全にはわかりません(私は自分のExcel interopコードを、以前見た例に基づいて作っています)。プロセスの実行を停止するには、アプリケーションを終了して終了することが重要です。私は数年前に.xlsxファイルを生成して操作するためにEPPlusに切り替えました。オープンソースで、C#で書かれています。 Excelの相互運用ができるすべてのことを行うことはできませんが、使用するのがはるかに簡単です(Webサーバーでもうまく機能します)。 –

+0

いくつかのガベージコレクションは、終了して終了すると、役立つかもしれません。 – gravity

関連する問題