私の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ファイルを、通常のように修正して、コピーとして保存するようにポップアップメッセージを表示せずに保存できるようにしたい。助けてくれてありがとう。
あなたのファイルを保存した後、以下を追加し
してみてください。これは私のプログラムの別の問題です。しかし、私は実際にはnewWB.Close(0); newApp.Quit();私のプログラムで。しかし、newApp.Close(0)(私の質問で私のコードスニペットを編集しました。)しかし、問題はまだ発生します。 newWB.Close(0)の代わりにnewApp.Close(0)を使用することで大きな違いはありますか? –
私は完全にはわかりません(私は自分のExcel interopコードを、以前見た例に基づいて作っています)。プロセスの実行を停止するには、アプリケーションを終了して終了することが重要です。私は数年前に.xlsxファイルを生成して操作するためにEPPlusに切り替えました。オープンソースで、C#で書かれています。 Excelの相互運用ができるすべてのことを行うことはできませんが、使用するのがはるかに簡単です(Webサーバーでもうまく機能します)。 –
いくつかのガベージコレクションは、終了して終了すると、役立つかもしれません。 – gravity