2015-12-15 16 views
7

Próbuję odczytać dane z pliku programu Excel.Nie można znaleźć błędu katalogu centralnego.

FileStream stream = File.Open (@"C:\Temp\F1\SMRPAC974-00024COMINVDETEXTRACT.xlsx", FileMode.Open, FileAccess.Read); 
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
DataSet result = excelReader.AsDataSet(); 
excelReader.Close(); 
string csvData = ""; 
int row_no = 0; 
while (row_no < result.Tables[0].Rows.Count) 
{ 
for (int i = 0; i < result.Tables[0].Columns.Count; i++) 
{ 
    csvData += result.Tables[0].Rows[row_no][i].ToString() + ";"; 
} 
row_no++; 
csvData += "\n"; 
} 

Problem, z którym obecnie się borykam, jest błędem "Nie można znaleźć głównego katalogu". Nie wiem, co to oznacza, próbowałem nawet przenieść plik Excela do różnych lokalizacji, ale wciąż mam ten sam błąd.

+0

Czy możesz podać stacktrace? –

+0

Czy plik może być uszkodzony? – Fred

+1

Biorąc pod uwagę, że plik .xlsx jest w zasadzie spakowanym plikiem xml, a błąd wydaje się wskazywać na problem z plikami zip, założyłbym uszkodzony plik. –

Odpowiedz

14

Wyjątek stwierdzając:

Nie można znaleźć katalogu centralnego

wskazuje, że jeden z poniższych jest prawdopodobnie prawdziwe:

  1. Plik jest uszkodzony
  2. Plik jest właściwie nie jest to plik .xslx (czy na pewno nie jest to plik .xls?)
  3. Biblioteka używasz odczytać plik ma błąd

z kodu wygląda na to, że używasz ExcelDataReader i próbuje otworzyć plik formatu XML (xlsx). Czy jesteś na pewno, że plik nie jest w rzeczywistości plikiem .xls, który ktoś błędnie nazwał jako .xlsx? Można to sprawdzić za pomocą:

IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 

zamiast:

IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
2

pogoda check używasz .xlsx lub plik .xls.

Jeśli używasz .xlsx następnie użyć

 IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 

jeśli używasz .xls następnie użyć

IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 

Nadzieję, że to pomaga. To zadziałało dla mnie.

Powiązane problemy