2016-08-25 9 views
0

のメモリ内でExcelファイルを処理するにはどうすればいいですか?データベースのクエリ - >ファイルをローカルに保存 - > Excel Interop Dllを使用してブックを開く、ワークブックを変更する、Excel Interop Dllを使用して名前を付けて保存するファイルを読み込み専用に設定しないように、いくつかの追加設定が必要なため保存する理由があります。私の現在のプロセスに従うと、

問題は、ローカルに2回保存しているということです。最初はうまくいきました。二回目は、オーバーライドしたいかどうかを尋ねるプロンプトが表示されます。私はどのようにファイルをローカルに保存するプロセスを削除し、それをメモリに入れて作業することができるのだろうかと思います。私がメモリ内のファイルで作業することができたら、Save Asにプロンプ​​トを出して、前のファイルを上書きするかどうか聞いてきます。

コード:

//Save File Locally 
System.IO.File.WriteAllBytes(saveFileDialog.FileName, Report.FileArray); 

var fileLocation = saveFileDialog.InitialDirectory + saveFileDialog.FileName; 

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 

// Open Workbook Using Excel Interop Dll 
Workbook wb = excel.Workbooks.Open(fileLocation); 

Worksheet ws1 = wb.Worksheets.get_Item("English"); 

//Make Changes To WorkBook 
ws1.Range["E5"].Value = StartDate; 
ws1.Range["G5"].Value = EndDate; 

// Save AS Using Excel Interop With shared settings to remove read only access 
wb.SaveAs(fileLocation, AccessMode: XlSaveAsAccessMode.xlShared); 

Process.Start(fileLocation); 
+0

Open XML SDKを使用します。これはXLSXファイルのLinq APIです。 Excel COM APIを呼び出すよりもはるかに少ない問題があります。 –

+0

@DavidThielenお勧めします、ありがとうございます! – Master

答えて

1

あなたはより良い

この

Microsoft.Office.Interop.MSProject.Application msProjectApp = new Microsoft.Office.Interop.MSProject.Application(); 
msProjectApp.DisplayAlerts = false; 
を試してみてください...私はこれが可能であるが、それはumnagedコードの多くを意味するものでは覚えているものに、プロンプトを無効にしたいです

編集

Microsoft.Office.Interop.Excel.Application msProjectApp = new Microsoft.Office.Interop.Excel.Application(); 
    msProjectApp.Visible = true; //show the application and not need to start a process 
    msProjectApp.DisplayAlerts = false; 
あなたは「自分」ワークブックと仲良くし、事前にそれを設定することができ、データのみにロードする場合
+0

ちょうどこれを行って、それは仕事をしません。これはトップレベル(アプリケーション)の設定です。警告はブックのレベルにある必要があります – Master

+0

私はおそらくインビジブルなアプリケーションで動作するかどうか分かりません – Mathieu

+0

しかし、あなたがアドバイスを許可していれば、私はサードパーティのライブラリを使ってExcelを操作しようとします。これは、このような多くの苦痛を抑制するこれは問題の始まりです – Mathieu

0
//Save File Locally 
System.IO.File.WriteAllBytes(saveFileDialog.FileName, Report.FileArray); 

var fileLocation = saveFileDialog.InitialDirectory + saveFileDialog.FileName; 

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 

// Open Workbook Using Excel Interop Dll 
Workbook wb = excel.Workbooks.Open(fileLocation); 

Worksheet ws1 = wb.Worksheets.get_Item("English"); 

//Make Changes To WorkBook 
ws1.Range["E5"].Value = StartDate; 
ws1.Range["G5"].Value = EndDate; 

// Save Only 
wb.Save(); 

Process.Start

excel.Visible = true; 
excel.DisplayAlerts = false; 
0

を削除するには、私はあることへのOLE DBアクセスSQL接続アプローチを見つけます生データをSQLにロードするためのより良い方法です。

関連する問題