2012-04-04 16 views
0

Ich habe eine Excel-Datei auf einem Server. Ich greife darauf mit einem Pfad wie folgt zu: "\\ Server \ folder \ file.xlsx".ExcelLibrary und EPPlus werfen Ausnahmen beim Öffnen der Netzwerkdatei

Ich konnte es mit der Excel-API aus dem Büro lesen, aber da ich Office auf meinem Server nicht installieren kann, muss ich diese Abhängigkeit vermeiden.

ich einige andere Bibliotheken versucht, mit, aber es funktioniert nicht ...

Ich habe versucht, die Datei mit EPPLUS öffnen, aber ich habe eine Ausnahme sagen: „Dieser Vorgang ist für eine relative URI unterstützt“, wenn ich versuchen, die Arbeitsmappe zu öffnen ... ich mit ExcelLibrary versucht, aber ich habe nicht genügend Arbeitsspeicher Ausnahme ...

//EXCELLIBRARY 
Workbook book = Workbook.Load(_filename); 

//EPPLUS 
FileInfo file = new FileInfo(_filename); 
ExcelPackage pack = new ExcelPackage(file); 
ExcelWorksheet sheet = pack.Workbook.Worksheets[1]; 

Hat jemand eine Idee hat, wie dieses Problem zu lösen?

Wenn nicht, müssen Sie eine andere Bibliothek vorschlagen? Ich möchte OleDB nicht verwenden und habe bereits NOPI ausprobiert. Ich möchte eine Bibliothek, die nur einen Verweis auf eine DLL hinzufügen muss. Ich muss Excel 2010 Dateien öffnen. Ich muss auch in der Lage sein zu bestimmen, was der verwendete Bereich im Blatt ist und ein Array mit den Werten zu erhalten. Hier ist der Code, den ich verwendet und mit der Office-API gearbeitet habe.

Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 
object misValue = System.Reflection.Missing.Value; 

xlApp = new Excel.ApplicationClass(); 
xlWorkBook = xlApp.Workbooks.Open(_filename, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

_range = (System.Array)xlWorkSheet.UsedRange.Value2; 
_headers = GetHeaders(_range); 

_lastRow = xlWorkSheet.Cells.Find("*", misValue, misValue, misValue, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlPrevious, false, misValue, misValue).Row; 

xlWorkBook.Close(false, misValue, misValue); 
xlApp.Quit(); 

Antwort

2

Nachdem ich den ganzen Tag viele Bibliotheken gesucht und getestet habe, habe ich endlich etwas gefunden, das funktioniert, Koogra.

http://sourceforge.net/projects/koogra/?_test=b

Workbook wb = new Workbook(_filename); 
_worksheet = wb.GetWorksheet(0); 

//You can do the same to find LastCol, LastRow or FirstCol 
uint firstRow = _worksheet.CellMap.FirstRow 
string aHeader = (string)_worksheet.GetRow(firstRow).GetCell(3); 
0

So sieht ein Netzwerkpfad nicht aus. Es sollte etwas wie

sein
\\server\path\to\file\image.jpg 

Beachten Sie die doppelten Schrägstriche am Anfang. Mit nur einem Schrägstrich wird es ein Pfad relativ zum aktuellen Laufwerk (was der Fehler Ihnen sagt).

+0

Ja, es ist wie Das. Ich schrieb zwei Schrägstriche, aber es zeigte nur einen. Ich habe meinen Post bearbeitet, ich musste drei schreiben, um zwei zu zeigen ... – Amaranth

0

Es scheint mir, dass Fileinfo-Konstruktor diese Ausnahme wirft, sind Sie sicher, dass EEPlus es wirft? Da auf NT-Familie ruft Fileinfo-Konstruktor Path.NormalizeSlow und das Verfahren wirft Ausnahme:

throw new ArgumentException(Environment.GetResourceString("Argument_PathUriFormatNotSupported")); 
+0

Ja, ich bin mir ziemlich sicher. Die Ausnahme wird ausgelöst, wenn ich pack.Workbook aufrufen. Ich habe den exakt gleichen Code mit dem Bibliotheks-Excel-Paket (welches der Ausgangspunkt von EPPlus ist) ausprobiert und es funktioniert gut, aber ich hatte nicht die Funktionen, die ich brauchte, um die letzte Zeile oder letzte Spalte zu erkennen. – Amaranth

0

Versuchen mit neuen Epplus Bibliothek 4.1

Die meisten Fehler werden in dieser Version behoben

+1

Dies ist wirklich ein Kommentar, keine Antwort. Mit ein wenig mehr Rep, [Sie können Kommentare posten] (// stackoverflow.com/privileges/comment). – manetsus

Verwandte Themen