2010-08-11 35 views
0

我在Excel表格中有幾列數據,我必須導入到我的應用程序中。在從excel導入數據集之前操作數據

我做到這一點使用 -

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"); 

雖然這個數據導入成功,有時導入數據錯誤,即有時一些1234567可以導入爲1.23E+06

這是可以解決的,如果在數據Excel文件是'1234567而不是1234567(附加單引號)

我現在試圖操縱我從Excel中獲取的數據,以便b在我導入數據之前,我可以通過編程將'附加到所有值以防止導入不正確。

我甚至嘗試使用OleDbDataAdapter.Update,但我想這不會幫助,因爲這發生在數據導入後。那是對的嗎?

我可以操縱數據以便導入正確的數據嗎?我該怎麼做?

+0

您是否嘗試過將單元格的格式設置爲郵政編碼,我知道這聽起來很奇怪,但它似乎是一個合理的好方法來讓長數字工作。 (郵編是特殊格式,您可能需要從語言環境下拉菜單中選擇英語美國) – Fionnuala 2010-08-11 19:35:17

+0

謝謝,我會盡力做到這一點。但是,該應用程序已經有很多用戶,將單元格格式設置爲郵政編碼可能是不可能的。 :(我將不得不以編程方式處理這個問題,或者,我可以在通過我的代碼導入之前格式化單元格嗎? – pavanred 2010-08-11 20:03:50

+0

您可以嘗試:) ... 範圍(「B1:B2」)選擇... 選擇.NumberFormat =「00000」 – Fionnuala 2010-08-11 20:10:12

回答

1

我使用的開源NPOI library從Excel導入數據,並保持數據的格式,因爲它是在試算表即1234567將被導入爲1234567,而不是像1.23E+06

而是以不同的格式導入數據如上面的問題導入數據,我導入使用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 
} 
0

我剛剛得到了類似的問題(在這裏找到它:Quirky SELECT from Excel file via OleDbDataAdapter method (C#))。

嘗試使用下面的連接字符串,如果你想只使用.NET框架,無需外部庫:

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

從JET切換引擎ACE爲我做。