2017-10-06 19 views
1

私はC#の初心者です。多くの実験をしています。私はプログラムをユーザーフレンドリーにしています。 最初は郵便受けの場所は静的な文字列であり、問​​題はありませんでした。問題ありませんExcelファイルを保存中にエラーが発生しました。

private void but_Browse_Click(object sender, EventArgs e) 
    { 

     var FD = new System.Windows.Forms.OpenFileDialog(); 
     if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      string fileToOpen = FD.FileName; 

      System.IO.FileInfo File = new System.IO.FileInfo(FD.FileName); 

      //OR 

      System.IO.StreamReader reader = new System.IO.StreamReader(fileToOpen); 
      //etc 
      but_Browse.Text = fileToOpen; 
      this.but_Browse.AutoSize = true; 
      But_Import.Visible = true; 
     } 

    } 

は、Excelファイルを読むと、私はこれにそれを変更しました:

public string Excellocation() 

    { 
     string xlLocation; 
     if (but_Browse.Text == "Zoek Excel") 
     { 

      xlLocation = @"E:\Levi\Documents\Verjaardagen.xlsx"; 
     } 
     else //Only if I get into this part of my code I get the error 
     { 
      xlLocation = but_Browse.Text; 
     } 
     return xlLocation; 
    } 

そして私は、ユーザーが私のExcelファイルの場所を与えることができます使用するボタンがあります私のプログラムはそれを見つけてそれを処理します、ユーザが "ブラウズボタン"を使用して場所を変更した場合に限り、Windowsからその名前のExcelファイルがすでに存在するというメッセージが表示されます。そのメッセージをクリックして、私のコードは、Excelファイルを保存しようとする行にエラーを表示します

  xlWorkbook.Save(); 
      xlWorkbook.Close(true); 
      xlApp.Quit(); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); 

xlWorkbook.Saveは()私は、このエラーを与える:私は私を与えるために私のボタンを使用している場合は、エラーを取得しない間

System.Runtime.InteropServices.COMException occurred
HResult=0x800A03EC Message=Verjaardagen.xlsx can not be saved, because it's read-only.

は、私はデフォルトの場所でエラーを取得しない理由はわかりません同じ場所。

誰かが間違っていることを知っていますか?事前

+0

あなたのコードを次のように修正してください: 'xlLocation = but_Browse.Text; MessageBox.Show(xlLocation); 'それはあなたに手がかりを与えますか? –

+0

メッセージボックスは私にこれを与えます: E:\ Levi \ Documents \ Verjaardagen.xlsx それは正しいでしょうか? –

+0

あなたの 'StreamReader'と何か関係はありますか?それを保存しようとするとファイルが開いていますか? –

答えて

0

おかげだから、問題は、あなたがbut_Browse_Clickを経て、それへの書き込みをしようとした場合にのみ、ファイルが読み込まれていることでしょうか?あなたはStreamReaderを閉じていますか? but_Browse_Clickに

reader.close();

を使用してみてください。

おそらくより良い方法は、次のようになります。

using (StreamReader reader = new StreamReader(fileToOpen)) { //all code involving the reader in here }

これは自動的に終了した時点で終了します。