日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读excel文件至DataTable

發布時間:2024/4/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读excel文件至DataTable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天是我注冊博客園的日子,不知道寫什么才好.就寫下工作中遇到的事情.
  在.net中讀excel文件的代碼網上是多之又多,當初在網上搜索了一段,用的是OLEDB方法,我也不例外,但客戶多次向我公司反映,導入的數據,明明是有值的,但顯示為空.說不能識別文本文字,只能識別數字類型.測試了又測試,在連接字符串中加上"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1",說是可以解決混合類型.但是,實際上,還是不能解決問題.后來,我發現,如果,第一行第一列的數據是數字類型,第二行第一列的數據是文本類型,這時,就會顯示不出第二行第一列的數據,它是一個空值.若是第一行第一列的數據是文本類型,第二行第一列的數據是數字類型,將會正常顯示.后來,我又發現,改HDR=NO;這時,不管是數字類型還是文本類型,都能正常讀出.但是它第一行顯示的格式是這樣的:F1,F2..第二行顯示的才是列名.
   最后,網上很多說用?Excel.Application讀,但是速度很慢,為了能讀得出數據,不丟失數據,只好先用這個方法了..
代碼如下:

using System;
using System.Collections.Generic;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
using System.Data;
namespace Baolida.Shared.Common
{
??? public class ExcelOperate
??? {
??????? [DllImport("User32.dll", CharSet = CharSet.Auto)]
??????? public static extern int GetWindowThreadProcessId(IntPtr hwnd, out?? int ID);
??????? public System.Data.DataTable ReadExcelData(string path)
??????? {


??????????? Excel.Application exc = null;
??????????? Workbooks workBooks = null;
??????????? Workbook workBook = null;
??????????? Worksheet workSheet = null;
??????????? string strValue = "";
??????????? Excel.Range r = null;
??????????? System.Data.DataTable dt = new System.Data.DataTable();
??????????? DataRow myRow;
??????????? object oMissing = System.Reflection.Missing.Value;
??????????? try
??????????? {

??????????????? exc = new Excel.Application();
??????????????? exc.UserControl = true;
??????????????? exc.Application.Workbooks.Open(path, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
??????????????? workBooks = exc.Workbooks;
??????????????? workBook = workBooks[1];
??????????????? workSheet = (Worksheet)workBook.Worksheets[1];

??????????????? int colCount = workSheet.UsedRange.Columns.Count; //獲得列數
??????????????? int rowCount = workSheet.UsedRange.Rows.Count; //獲得行數

??????????????? //獲取字段名稱
??????????????? for (int k = 1; k <= colCount; k++)
??????????????? {
??????????????????? r = (Excel.Range)workSheet.Cells[1, k];
???????????????????
??????????????????? strValue = r.Text.ToString().Trim();
??????????????????? dt.Columns.Add(strValue, System.Type.GetType("System.String"));
??????????????? }

??????????????? //獲取內容
??????????????? for (int i = 2; i <= rowCount; i++)
??????????????? {

??????????????????? myRow = dt.NewRow();
??????????????????? for (int j = 1; j <= colCount; j++)
??????????????????? {

??????????????????????? //取excel單元格中的值
??????????????????????? r = (Excel.Range)workSheet.Cells[i, j];
??????????????????????? strValue = r.Text.ToString().Trim();
??????????????????????? myRow[j - 1] = strValue;
??????????????????? }
???????????????
??????????????????? dt.Rows.Add(myRow);
??????????????? }


??????????????? //關閉當前的excel進程
??????????????? exc.Application.Workbooks.Close();
??????????????? exc.Quit();
??????????????? System.Runtime.InteropServices.Marshal.ReleaseComObject(exc);
??????????????? exc = null;
??????????????? IntPtr t = new IntPtr(exc.Hwnd);
??????????????? int kid = 0;
??????????????? GetWindowThreadProcessId(t, out kid);
??????????????? System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(kid);
??????????????? p.Kill();
??????????? }
??????????? catch { }
??????????? return dt;
??????? }

??? }
}

轉載于:https://www.cnblogs.com/cylx00/archive/2008/05/23/1205868.html

總結

以上是生活随笔為你收集整理的读excel文件至DataTable的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。