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.
Può dirci in che modo la colonna viene contrassegnata come numerica? – SharpCoder
Ho modificato la domanda, ancora non ho idea di come farlo correttamente. – Luntri
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