2015-04-03 9 views
8

Sto sviluppando un'applicazione per leggere i file xlsx, eseguire alcune convalide e inserirli nel database. Sfortunatamente quando provo a leggere le colonne contrassegnate come numeriche (con codici EAN-13) ottengo il valore minimo di un int. L'utente non lo vede perché Excel lo visualizza correttamente.Forza EPPLUS a leggere come testo

Come posso farlo leggere il file come testo normale? So che posso utilizzare OLEBD per questo, ma ho anche bisogno di modificare il file in modo dinamico, quindi ePlus ExcelPackage è la scelta migliore.

Ecco il codice im utilizzando:

FileInfo file = new FileInfo(path); 
MainExcel = new OfficeOpenXml.ExcelPackage(file); 
{ 
    var ws = MainExcel.Workbook.Worksheets.First(); 
    DataTable tbl = new DataTable(); 
     for (var rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++)  //currently loading all file 
       { 
        var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column]; 
        var row = tbl.NewRow(); 
        foreach (var cell in wsRow) 
        { 
         row[cell.Start.Column - 1] = cell.Text; 
        } 
        tbl.Rows.Add(row); 
       }   
} 

ed è così che ho enumerare le colonne

foreach (var firstRowCell in ws.Cells[3, 1, 3, ws.Dimension.End.Column]) 
       { 
        System.Type typeString = System.Type.GetType("System.String") ; 
        tbl.Columns.Add(firstRowCell.Text , typeString); 
       } 

Per persone che potrebbe riguardare, qui è il file (funziona anche per gli utenti non di Google): https://drive.google.com/open?id=0B3kIzUcpOx-iMC1iY0VoLS1kU3M&authuser=0

Ho notato che la proprietà ExcelRange.value è una matrice che contiene tutti gli oggetti non formattati. Ma una volta iterata su celle in ExcelRange e richiesta la proprietà cell.Text, è già stata elaborata. Cercando di modificare ConditionalFormatting e DataValidation in ExcelRange non aiuta (fe AddContainsText()) - @EDIT -> Né per un intero foglio :-(

Preferirei NON eseguire il cast di ExcelRange.Value come array, è brutto e molto condizionato.

+2

Può dirci in che modo la colonna viene contrassegnata come numerica? – SharpCoder

+0

Ho modificato la domanda, ancora non ho idea di come farlo correttamente. – Luntri

+1

Dove stai leggendo la cella che sta uscendo come 'int.MinValue'? Vedo la riga in cui si ha 'row [...] = cell.Text', ma quella proprietà' Text' dovrebbe essere una stringa. Non ricordo che sia un oggetto. – krillgar

risposta

8

Apparentemente questa è la soluzione (non il codice completo però, devi aggiungere colonne a datatable). Non sono riuscito a trovare la stringa di formato che specifica "nessuna formattazione" in Epplus, ma qui ce l'hai.

var ws = MainExcel.Workbook.Worksheets.First(); 
DataTable tbl = new DataTable(); 
for (var rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++)  
{ 
    var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column]; 
    var array = wsRow.Value as object[,]; 

    var row = tbl.NewRow(); 
    int hhh =0; 

    foreach (var cell in wsRow) 
      { 
      cell.Style.Numberformat.Format = "@"; 
      row[cell.Start.Column - 1] = cell.Text; 
      } 
    tbl.Rows.Add(row); 
} 
+1

Per aggiungere un chiarimento, '[cella/intervallo] .Numberformat.Format =" @ ";' formatta la cella/intervallo specificato come Testo nel foglio di lavoro generato (a differenza di Generale, Numero, Valuta, Contabilità, Data breve, ecc.) – DaveD

2

Le cellule nel file sono su formattati come frazione. avete fatto di proposito? in ogni caso, se si desidera mantenere questo formato, in alternativa è possibile utilizzare cell.Value o cell.RichText.Text per ottenere il vostro 13 -digit number

Spero che questo aiuti

+0

Sono gli utenti che mi inviano i file. Non sono affatto responsabile della loro modifica. Ho trovato il modo per farlo correttamente ora, BTW Cell.value è già stato elaborato quando richiesto :) – Luntri

+1

Risolto il problema per me. -> 'cell.Text' mostrava la parte VISIBILE, ma non il valore completo nella cella, mentre 'cell.Value' mi dava il valore completo. "cell.RichText.Text", a proposito, sembrava causare strani problemi durante l'iterazione sulle celle di una riga. – Anytoe

Problemi correlati