2016-08-25 1 views
0

im Moment ist mein derzeitiger Prozess wie folgt. Datenbank abfragen -> Datei lokal speichern -> Arbeitsmappe mit Excel Interop Dll öffnen, Änderungen am Arbeitsbuch vornehmen, Speichern unter Verwendung von Excel Interop Dll. Der Grund für das Speichern ist, weil ich einige zusätzliche Einstellungen benötige, so dass die Datei nicht auf schreibgeschützt eingestellt ist.Wie mit Excel-Datei im Speicher arbeiten

Das Problem, das ich finde, ist, dass es lokal zweimal speichert. Das erste Mal ist in Ordnung, zum zweiten Mal erscheint eine Abfrage, ob ich übergehen möchte. Ich frage mich, wie kann ich den Save File Locally-Prozess entfernen und im Speicher haben, um damit zu arbeiten? Wenn ich mit der Datei im Speicher arbeiten kann, würde ich die Eingabeaufforderung Save As fragen, ob ich die vorherige Datei überschreiben möchte.

Code:

//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

Möglicherweise möchten Sie das Open XML SDK verwenden. Es ist eine Linq-API für die XLSX-Datei. Viel weniger Probleme mit dem Aufruf der Excel-COM-API. –

+0

@DavidThielen Danke für die Empfehlung, ich werde mich darum kümmern! – Master

Antwort

1

Sie würden besser die Aufforderung deaktivieren, zu dem, was ich erinnere mich dies möglich ist, aber es eine Menge umnaged Code bedeuten ...

Versuchen Sie, diese

Microsoft.Office.Interop.MSProject.Application msProjectApp = new Microsoft.Office.Interop.MSProject.Application(); 
msProjectApp.DisplayAlerts = false; 

Bearbeiten

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

Ich habe es einfach ausprobiert und es funktioniert nicht. Es befindet sich auf der obersten Ebene (Anwendung). Die Warnungen müssen auf der Arbeitsbuch-Ebene – Master

+0

Ich bin mir nicht sicher, vielleicht funktioniert es mit einer unsichtbaren App – Mathieu

+0

Aber wenn Sie einen Rat erlauben, wenn ich Sie wäre, würde ich versuchen, eine Drittanbieter-Bibliothek verwenden, um Excel zu manipulieren. Es wird eine Menge Schmerz wie diese unterdrücken und das ist nur der Anfang der Probleme – 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(); 

entfernen Process.Start

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

Wenn Sie „eigene“ die Arbeitsmappe und es einrichten können vorher schön zu spielen und werden nur in Daten geladen werden, finde ich den OleDB Access SQL-Verbindung Ansatz zu sein eine bessere Möglichkeit, Rohdaten in SQL zu laden.