1. 程式人生 > >[C#新手入門 九] C#讀取Excel表中的資料時,有的資料讀取不到

[C#新手入門 九] C#讀取Excel表中的資料時,有的資料讀取不到

今天把程式釋出到伺服器IIS後,執行發現一個問題,有的excel匯入模板出現匯入資料丟失,某列第一行是空白沒有值,後面是數字型別的資料,匯入時整列值後變成空白了。

匯入的方式是在客戶機選擇Excel匯入模板,上傳到伺服器,在伺服器上執行讀取Excel,資料寫入資料庫。

解決方案百度搜的如下:

登錄檔修改內容如下:在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel有一個TypeGuessRows值,預設是8, 將其改為0 就OK了。

1、當某列資料中含有混合型別時,在.NET中使用Microsoft.Jet.OLEDB.4.0來讀取Excel檔案造成資料丟失是不可避免的,要解決這個問題只能考慮採用其它資料讀取方法。 


2、在.NET中讀取Excel檔案的另外一種方法是回到使用傳統COM元件,但使用COM元件來讀取Excel檔案資料的效率較低,在作釋放的時候有可能碰到不可預知的錯誤,特別開發Web應用的程式應該慎重使用
3、一種有效的方法可以是,在讀取Excel的.xls型別的文字資料之前,先將其轉換為.csv格式,在Excel中直接另存為這種格式就可以達到轉換的目的。CSV檔案又稱為逗號分隔的檔案,是一種純文字檔案,它以“,”分隔資料列
4、對csv檔案不要採用ole db或odbc方法讀取,這樣還會出現同樣問題。要採用普通的讀取文字檔案的方法開啟檔案,讀取第一行,用“,”作為分隔符獲得各欄位名,在DataTable中建立對應的各欄位,欄位的型別可以統一建立成“string”。 

參考程式碼(demo)如下:



String line; 
  String [] split = null; 
  DataTable table=new DataTable("auto"); 
  DataRow row=null; 
  StreamReader sr=new StreamReader("c:/auto.csv",System.Text.Encoding.Default); 
  //建立與資料來源對應的資料列 
  line = sr.ReadLine(); 
  split=line.Split(','); 
  foreach(String colname in split){ 
  table.Columns.Add(colname,System.Type.GetType("System.String")); } 
  //將資料填入資料表 
  int j=0; 
  while((line=sr.ReadLine())!=null){ 
   j=0; 
   row = table.NewRow(); 
   split=line.Split(','); 
   foreach(String colname in split){ 
   row[j]=colname; 
   j++;} 
   table.Rows.Add(row);} 
   sr.Close(); 
  //顯示資料 
  dataGrid1.DataSource=table.DefaultView; 
  dataGrid1.DataBind(); 


=======以下來自網路===============================================

http://www.cnblogs.com/jonhson/archive/2010/12/09/1901003.html

今天碰到這問題

無法讀取EXCEL中的資料單元格。有資料,但是讀出來全是空值。

解決方法:

1.在匯入資料連線字串中,將IMEX=1加入,“Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Data.xls";Extended Properties="Excel 8.0;HDR=Yes;IMEX=1; ”,這樣就可以。

注:

“HDR=Yes;”指示第一行中包含列名,而不是資料;

“IMEX=1;”通知驅動程

序始終將“互混”資料列作為文字讀取。

兩者必須一起使用。

本以為這樣就OK了。但在實際使用過程中,這樣設定還是不行,查閱了不少資料才發現,原來還有一個登錄檔裡的資訊需要修改,這樣帶能讓excel不再使用前8行的內容來確定該列的型別。

登錄檔修改內容如下:

在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel有一個TypeGuessRows值,預設是8,表示會先讀取前8列來決定每一個欄位的型態,所以如果前8列的資料都是數字,到了第9列以後出現的文字資料都會變成null,所以如果要解決這個問題,只要把TypeGuessRows機碼值改成0,就可以解這個問題了。


相關推薦

[C#新手入門 ] C#讀取Excel資料有的資料讀取

今天把程式釋出到伺服器IIS後,執行發現一個問題,有的excel匯入模板出現匯入資料丟失,某列第一行是空白沒有值,後面是數字型別的資料,匯入時整列值後變成空白了。 匯入的方式是在客戶機選擇Excel匯入模板,上傳到伺服器,在伺服器上執行讀取Excel,資料寫入資料庫。

C#.net讀取Excel資料有些欄位內容(字串、數字)讀取到的解決辦法

匯入Excel時,會丟失一些手機號,或者固定電話號 問題出在於,他們將資料填入Excel時,有些格式是數值型別,有些是文字型別 當用OLEDB讀取Excel的時候,在Extended Properties中若沒有配置IMEX=1的屬性,微軟的處理機制是將列轉換為同一

簡單的java讀取excel資料程式碼

package com.wondersgroup; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.u

新手小白用C# winform 讀取Excel

一、介面部分:首先,開啟visual studio新建專案;然後使用“工具箱”新增控制元件:分別新增button,datagridview,textbox三種窗體;所得到的介面圖如圖所示:(多加了幾個文字框)二、程式碼部分:1、新增名稱空間:using System.Data

新手入門學習c++你必須知道的發展前景和市場行情!

c++如今的市場不如從前,競爭很大,工資非常高,標準非常高,想要勝任一份高薪的工作不是那麼容易,只有掌握最新的行情才能更好的瞭解c++,百度內推文章,讓新手小白瞭解c++市場行情如下: 行情一:當下和五年前的區別,在五年我們這個行業不僅僅缺人才,連新手都缺,那個時候公司願意招聘實習生,培

C#——新手入門

我的第一個C#程式 廢話不說,程式碼如下: using System;//自動引用系統名稱空間 namespace Day01_Csharp//這是名稱空間 { class Program//這是一個類 { static void Main(stri

C#LeetCode刷題之#168-Excel列名稱(Excel Sheet Column Title)

問題 給定一個正整數,返回它在 Excel 表中相對應的列名稱。 例如,     1 -> A     2 -> B     3 -> C     ...     26 -&g

[C]第一章--初識C語言(1)--C新手入門

初識C語言 什麼是C語言? 第一個C語言程式 資料型別 變數和常量 變數 變數的分類 變數的作用域與生命週期 作用域 生命週期 常量 常量的分類

C#讀取Excel表格資料並返回datatable

在軟體開發的過程中,經常用到從excel表格中讀取資料作為資料來源,以下整理了一個有效的讀取excel表格的方法。 DataTable GetDataTable(string tableName,string leftTopCel,string rightbutCel)

C#讀取excel資料文字格式和數值格式的內容無法正常全部讀取

表現:excel中某列中,有的單元格左上角有綠色箭頭標誌,有的沒有,c#編寫讀取程式,但是隻能讀取出帶綠色箭頭的單元格中的內容,其餘不帶的讀取不到內容 原因:excel中單元格因為是文字格式而儲存了數值,導致後臺錯誤檢查,在左上角顯示綠色箭頭 解決:string strConn; 原來讀取不完全的寫法:st

C# 使用NPOI讀取Excel表格第一個sheet內容存在DataTable

很久沒寫文章了,主要是從java轉到c#,經歷坎坷一言難盡呀,但最重的一點,就是變懶了。希望你們不要學小編。。。咳咳。。好乾貨開始。 二、前端用form表單提交即可,js或jq觸發form提交即可 <form class="form-hori

C#中導出數據到Excel表格

manage app 獲取 讀取 pen shee 格式 之前 pattern 之前PM交給我一個自動化測試的Case,讓我抓取頁面上的數據到Excel表格中,剛好又接了一個之前人家做的系統, 剛好看到可以用NPOI導數據,就動手試試,成功導出。 由於鄙人比較菜

c++連結SQL server 用SQL語句打印的記錄增加的記錄刪除的欄位

#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF") // 唯一的應用程式物件 CWinApp

C#:如何輸出資料到excel表格

最近需要將工作中產生的一些資料發到excel表格內進行處理,因此記錄下解決問題的思路 一:如何建立一個excel檔案 使用FileStream類,程式碼如下 string fileDir = "e:\\VSWorkSpace\\TryForm\\TryForm\\bin\\Debug\\

NPOI 讀取Excel 資料 資料裡面帶日期的處理方法

將ExcelToDataTable 方法下的  //if (row.GetCell(j) != null) //同理,沒有資料的單元格都預設是null // dataRow[j] = row.GetCell(j).ToString();  替換為 if (row.Ge

Excel資料 轉換成XML 並對XML資料進行讀取

EXCEL 轉換成 XML 工具類 using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.Xml; usi

python讀取txt資料轉換到excel

接收後臺模擬資料,存放在txt檔案中,需要轉換到excel中 txt中的資料格式為:  recv message - 82815: {"export1": 0, "export0": 0, "export3": 1, "export2": 0, "export5": 0,

C#元件系列——又一款Excel處理神器Spire.XLS你值得擁有(二)

前言:上篇 C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有 介紹了下元件的兩個功能,說不上特色,但確實能解決我們專案中的一些實際問題,這兩天繼續研究了下這個元件,覺得有些功能用起來還是挺方便的,這篇繼續來看看Spire.XLS的一些其他功能,說不定有你需要的呢~~ 一、基礎入門

C#元件系列——又一款Excel處理神器Spire.XLS你值得擁有

前言:最近專案裡面有一些對Excel操作的需求,博主想都沒想,NPOI唄,簡單、開源、免費,大家都喜歡!確實,對於一些簡單的Excel匯入、匯出、合併單元格等,它都沒啥太大的問題,但是這次的需求有兩點是NPOI搞不定的: 匯入Excel後,需要切割Excel的Sheet頁,然後每個Sheet頁單獨生成一

利用poi將excel資料讀取存入mysql資料庫(資料量比較大)

最近被老大安排了一個任務,利用程式將excle表中的資料讀取到,做處理,然後存進資料庫。接到任務的時候人是懵逼的。但是安排的任務也得硬著頭皮完成。現將做的東西記錄如下,方便以後查詢。 這個小demo的原型是在網上找的,demo連結如下 http://www.cnblogs.