Ⅰ 怎樣用C#讀取Excel文件
命名空間:using System.Data.OleDb;
另註:
參數:HDR=NO/YES
OleDb讀入一個Excel工作表(Sheet)的數據後,工作表的第一行會變成標題,第二行起,逐行變為DataTable的一個數據行(Row)
以下是代碼:
網友有個說法:stringsqlExcel=("select*from[計劃上sheet$A3:D8]");sheet$後面是范圍A3到D8的如果行不確定要取到後面行就把D8改成D
後來看到的,所以還沒測試,
以上這個問題我也在想,是不是excel裡面sheet的活動界面的問題,select * from [sheetName]選取了所有的列數,所以導致可能DaTaTable導致空列,建議在DaTaTable進行刪改,或者用datagrid修改,隨後保存修改到DATATABLE中。
對於其他的excel讀取方式,參見博客地址:http://www.cnblogs.com/icyJ/p/ReadExcel.html
另外對於參數connstring字元串的標准,
1)HDR表示要把第一行作為數據還是作為列名,作為數據用HDR=no,作為列名用HDR=yes;
使用 Excel 工作簿時,默認情況下,區域中的第一行是標題行(或欄位名稱)。如果第一個區域不包含標題,您可以在連接字元串的擴展屬性中指定 HDR=NO。如果您在連接字元串中指定 HDR=NO,Jet OLE DB 提供程序將自動為您命名欄位(不管excel中的列叫什麼名字,F1 表示第一個欄位,F2 表示第二個欄位,依此類推,select F1,F2 from [sheet1$]);
2)IMEX=1將所有讀入數據看作字元,其他值(0、2)請查閱相關幫助文檔;
3)如果出現「找不到可安裝的isam」錯誤,一般是連接字元串錯誤
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
HDR表示要把第一行作為數據還是作為列名,作為數據用HDR=no,作為列名用HDR=yes;
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
接著繼續:
這里出現的問題是:
很容易造成讀入很多的空行到datatable中,比如下面的excel,我們基本上看不出到底有多少實際的行數:
string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查詢字元串
string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查詢字元串,欄位名注意一定要和excel中標題名一致,有空格哦~
note:這時HDR參數必須是YES,否則會報異常
參考:http://www.devba.com/index.php/archives/4024.html
Excel讀取存在空白的原因:表格有兩個後台屬性,分別是已使用的最大行數和已使用的最大列數。這個 adapter可能是按這兩個屬性來的,沒法改。讀取代碼部分如圖所示,圖示為主要解析Excel到DataTable.經過仔細監視代碼我們會發現在 da.Fill(dt)時,把空白行填充到DataTable了。總體來講這個是有微軟提供的方法和規則,那麼是沒辦法改的。
解決辦法有以下幾個:
1、在讀取的時候SQL語句上進行過濾:Select * From SheetName where col1 is not null and col2 is not null 在讀取的過程時,對空白行進行非空顧慮,建議過濾非空時,根據業務,把不可為空的Excel中的列作為col1和col2;當然可以先刪除空白行後再進行 讀取;總之先把空白行在讀取到Excel前除掉;
2、在讀取Excel到DataTable後再過濾掉空白行;DataTable空白行處理空白行方法應該很多的;但是在進行業務校驗的時候一定需要先刪除空白行!
Ⅱ C#DataTable去掉空白行.C#導入excel總是有幾行空白的,如何去除
第一種方法:空白行的來源是excel文件中存在空白行
將excel中的空白行直接刪除即可
第二中方法:在導入完成後再刪除
判斷Datatable中行是否為空
如果為空,則調用Rows.Remove(datarow)即可刪除該行
Ⅲ C# Winform DataTable 怎麼過濾兩列不重復
樓上的復雜了 你這個問題非常簡單,建議使用分組,這樣速度效率都很快
select
列1,列2,MIN(列3)as得到的列3
from列
groupby
列1,列2
Ⅳ 如何對DataTable中的數據進行篩選
對DataTable數據各種篩選
篩選一個DataTable的數據,賦值給另外一個DataTable
假設:
有2個DataTable:DataTable A、DataTable B。
要求:
篩選DataTable A中itemType欄位值為book的數據,然後把篩選出來的數據,賦給DataTable B
實現:
(1)方法一:通過 RowFilter 篩選實現
DataView view = new DataView();
view.Table = A;
view.RowFilter = "itemType = 'book'";//itemType是A中的一個欄位
B= view.ToTable();
(2)方法二:通過 Select()篩選
DataRow[] rows = A.Select("itemType = 'book'");
B= A.Clone(); //克隆A的結構
foreach (DataRow row in rows)
{
B.ImportRow(row);//復制行數據
}
註:如果有多個篩選條件的話,可以加 and 或 or。例如: A.Select("itemType = 'book' and a='b' or a='c'");
Ⅳ 如何過濾掉DataTable中的指定列/欄位
C# code
dt.Columns.Remove( "列名稱 ");
dt.Columns.RemoveAt(列索引);
Ⅵ c#,datatable中對時間的過濾過濾
比較時間可以在資料庫比較或者取回數據後在程序比較,在資料庫比較會更理想。
用between是可以的,不過between前後的數據類型必須和數據本身都是date類型,串是沒法between的,數字當日起比對也不會正確。
你說你用>可以,<是空,那> and <肯定是空,我想問題還是出在你的數據類型上,檢查是不是都是date
Ⅶ VB.NET 怎麼對DataTable的某列數據進行條件篩選,篩選出來的結果該如何計算
可以用DataTable的相關操作方法來實現,在使用上類似sql語句。
Ⅷ jquery datatable 後台獲取到的數據 會被過濾掉空格,比如字元串三個空格 顯示時只會顯示一個空格。
核查一下,前台傳的時候的參數值(firebug--網路 就能跟蹤到傳到後台的參數,參數值,看看發送的時候有沒有空格),後台斷點跟蹤,取到的參數值,再看看空格有沒有。看看整個過程,那個環節出問題了
Ⅸ datatable compute sum 怎麼排掉為空的數值
在個人版機房重構的過程中,大家最發愁的一件事無非就是上下機,結賬和報表。那麼在結賬的過程中,最發愁的是否就數計算日結賬單的數據和周結賬的數據。還記得在第一遍機房收費系統的過程中用的是for 循環,但是現在考慮多了為了節省時間能不能不用那麼長的循環直接用某個函數求和?所以帶著這個問題,就進入了查找資料的過程。得知在Datatable中可以直接求出某行某列的和,所以這就是Datatable.Compute小技巧的由來。
那麼接下來就進入DataTable.Compute的學習吧!
以前你肯定沒想到DataTable.Compute具有這么多的功能
1:聚合函數」Sum()」
2:自由計算表達式「20*30+1」
3:bool表達式「1=2」
4:IFF邏輯表達式」 IIF(20>1000, 0, 1)」 //還支持IsNull,Trim,SubString等
一個小應用:讓DataTable模擬Excel的Formula功能。
Excel中的Formula功能強大,如果能讓DataTable有類似的功能就好了。大部分事件DataTable只是用作數據載體,其實很少用它做計算。DataTable提供的函數Compute就提供了功能強大的計算功能。
Compute函數的參數就兩個:Expression,和Filter。
Expresstion是計算表達式,
而Filter則是條件過濾器,類似sql的Where條件。
Ⅹ C在一個DataTable中,Select方法如何寫篩選條件達到過濾出數值型空的值
你的002 StuAge是 NULL 的話
select * from DataTable where StuAge is null