Pergunta

Eu tenho algumas colunas de dados em uma planilha do Excel que tenho que importar para o meu aplicativo.

Eu faço isso usando -

string strConn;
OleDbDataAdapter oledaExcelInfo;

strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Server.MapPath(strSavePath + strRepFileName) + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
oledaExcelInfo = new OleDbDataAdapter("SELECT * FROM [Book1]", strConn);

dsetExcelInfo = new DataSet();            
oledaExcelInfo.Fill(dsetExcelInfo, "CCInfo");

Enquanto isso importa dados com sucesso, às vezes os dados são importados incorretamente, ou seja, às vezes um número 1234567 poderia ser importado como 1.23E+06

Isso pode ser resolvido se os dados no arquivo do Excel for '1234567 ao invés de 1234567 (Anexe a marca única)

Agora estou tentando manipular dados que busco do Excel para que, antes de importar os dados, eu possa anexar programaticamente um ' a todos os valores para impedir a importação incorreta.

Eu até tentei usar o OleDBDataAdapter.Update, mas acho que isso não ajudará, pois isso acontece depois que os dados são importados. Isso está correto?

Posso manipular dados para importar os dados corretos? Como eu posso fazer isso?

Foi útil?

Solução

Eu usei o código aberto Biblioteca NPOI Para importar dados do Excel e Preserve Format of the Data, como estavam na planilha, ou seja, 1234567 seria importado como 1234567 em vez de importar dados em um formato diferente como 1.23E+06

Em vez de importar dados, como mostrado na pergunta acima, importo dados usando a biblioteca NPOI -

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

HSSFWorkbook hssfworkbook;
using (FileStream file = new FileStream(Server.MapPath(strSavePath + strRepFileName), FileMode.Open, FileAccess.Read))
{
     hssfworkbook = new HSSFWorkbook(file);
}
Sheet sheet = hssfworkbook.GetSheet("Book1");

DataTable dt = new DataTable();    //Create datatable 
dt.Columns.Add();             //Add data columns

for (int count = 0; count <= sheet.LastRowNum; count++)
{
    DataRow dr = dt.NewRow();         //Create new data row

    //Based on the type of data being imported - get cell value accordingly    
    dr[0] = sheet.GetRow(count).GetCell(0).StringCellValue;   
    //dr[0] = sheet.GetRow(count).GetCell(0).NumericCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).RichStringCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).DateCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).BooleanCellValue;

    dt.Rows.Add(dr);  //Add row to datatable
}

Outras dicas

Acabei de ter um problema semelhante (encontre aqui: Selecionar peculiar ).

Tente com a seguinte sequência de conexão, se você deseja usar apenas o .NET Framework sem bibliotecas externas:

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";";  

Mudar o motor de Jet para Ace fez isso por mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top