国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# excel與DataTable之間的轉(zhuǎn)換

這篇具有很好參考價(jià)值的文章主要介紹了C# excel與DataTable之間的轉(zhuǎn)換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

注意,Excel讀入DataTable需要使用NPOI包

/// <summary>
  /// Excel導(dǎo)入成Datable
  /// </summary>
  /// <param name="file">導(dǎo)入路徑(包含文件名與擴(kuò)展名)</param>
  /// <returns></returns>
  public static DataTable ExcelToTable(string file, string sheetName = "")
  {
    DataTable dt = new DataTable();
    IWorkbook workbook = null;
    try
    {

      string fileExt = Path.GetExtension(file).ToLower();
      using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
      {
        //XSSFWorkbook 適用XLSX格式,HSSFWorkbook 適用XLS格式
        if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; }
        if (workbook == null) { return null; }

        ISheet sheet = string.IsNullOrWhiteSpace(sheetName) ? workbook.GetSheetAt(0) : workbook.GetSheet(sheetName);

        //表頭  
        IRow header = sheet.GetRow(sheet.FirstRowNum);
        if (header == null)
        {
          throw new Exception("Excel表沒有數(shù)據(jù),請(qǐng)?zhí)砑訑?shù)據(jù)");
        }
        List<int> columns = new List<int>();
        for (int i = 0; i < header.LastCellNum; i++)
        {
          object obj = GetValueType(header.GetCell(i));
          if (obj == null || obj.ToString().Trim() == string.Empty)
          {
            continue;
          }
          else
          {
            dt.Columns.Add(new DataColumn(obj.ToString()));
          }
          columns.Add(i);
        }
        //數(shù)據(jù)  
        for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
        {
          DataRow dr = dt.NewRow();
          bool hasValue = false;
          foreach (int j in columns)
          {
            if (sheet.GetRow(i) != null) {
              dr[j] = GetValueType(sheet.GetRow(i).GetCell(j));
            }
            
            //if (dr[j] != null && dr[j].ToString() != string.Empty)
            //{
            //  hasValue = true;
            //}
          }
          //if (hasValue)
          //{
          //  dt.Rows.Add(dr);
          //}
          dt.Rows.Add(dr);

        }
        dt.AcceptChanges();

      }
      return dt;
    }
    catch (Exception e)
    {
      return null;
    }
    finally
    {
      if (dt != null) { dt.Dispose(); }
      if (workbook != null) { workbook = null; }
    }
  }
  /// <summary>
  /// 獲取單元格類型
  /// </summary>
  /// <param name="cell"></param>
  /// <returns></returns>
  private static object GetValueType(ICell cell)
  {
    if (cell == null)
      return null;
    switch (cell.CellType)
    {
      case CellType.Blank: //BLANK:  
        return "";
      case CellType.Boolean: //BOOLEAN:  
        return cell.BooleanCellValue;
      case CellType.Numeric: //NUMERIC:  
        return cell.NumericCellValue;
      case CellType.String: //STRING:  
        return cell.StringCellValue;
      case CellType.Error: //ERROR:  
        return cell.ErrorCellValue;
      case CellType.Formula: //FORMULA:  
      default:
        return "=" + cell.CellFormula;
    }
  }

DataTable讀入Excel

/// <summary>
		/// Datatable生成Excel表格并返回路徑
		/// </summary>
		/// <param name="m_DataTable">Datatable</param>
		/// <param name="s_FileName">文件名</param>
		/// <returns></returns>
		public static string DataToExcel(System.Data.DataTable m_DataTable, string s_FileName)
		{
			//string FileName = @"C:\Users\JK\Desktop\DataTableToExcel\" + s_FileName + ".xlsx";  //文件存放路徑
			string FileName = s_FileName;
			if (System.IO.File.Exists(FileName))                                //存在則刪除
			{
				System.IO.File.Delete(FileName);
			}
			System.IO.FileStream objFileStream;
			System.IO.StreamWriter objStreamWriter;
			string strLine = "";
			objFileStream = new System.IO.FileStream(FileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
			objStreamWriter = new System.IO.StreamWriter(objFileStream, Encoding.Unicode);
			for (int i = 0; i < m_DataTable.Columns.Count; i++)
			{
				strLine = strLine + m_DataTable.Columns[i].Caption.ToString() + Convert.ToChar(9);      //寫列標(biāo)題
			}
			objStreamWriter.WriteLine(strLine);
			strLine = "";
			for (int i = 0; i < m_DataTable.Rows.Count; i++)
			{
				for (int j = 0; j < m_DataTable.Columns.Count; j++)
				{
					if (m_DataTable.Rows[i].ItemArray[j] == null)
						strLine = strLine + " " + Convert.ToChar(9);                                    //寫內(nèi)容
					else
					{
						string rowstr = "";
						rowstr = m_DataTable.Rows[i].ItemArray[j].ToString();
						if (rowstr.IndexOf("\r\n") > 0)
							rowstr = rowstr.Replace("\r\n", " ");
						if (rowstr.IndexOf("\t") > 0)
							rowstr = rowstr.Replace("\t", " ");
						strLine = strLine + rowstr + Convert.ToChar(9);
					}
				}
				objStreamWriter.WriteLine(strLine);
				strLine = "";
			}
			objStreamWriter.Close();
			objFileStream.Close();
			return FileName;        //返回生成文件的絕對(duì)路徑
		}

文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-675060.html

到了這里,關(guān)于C# excel與DataTable之間的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C#實(shí)現(xiàn)將excel轉(zhuǎn)換成pdf的三種方法

    本人經(jīng)過一上午的搜索,總結(jié)了C#將excel轉(zhuǎn)pdf的三種方法(導(dǎo)出的excel轉(zhuǎn)化成pdf下載下來(lái))。 設(shè)計(jì)文章數(shù)量較多,沒有轉(zhuǎn)載請(qǐng)見諒。 下載地址https://www.e-iceblue.cn/Downloads/Free-Spire-XLS-NET.html 附帶MemoryStream與FileStream的相互轉(zhuǎn)換 以上三種方法經(jīng)過試驗(yàn)是可以使用的。 據(jù)說還有用py

    2024年02月04日
    瀏覽(17)
  • DataTable擴(kuò)展 列轉(zhuǎn)行方法(2*2矩陣轉(zhuǎn)換)

    DataTable擴(kuò)展 列轉(zhuǎn)行方法(2*2矩陣轉(zhuǎn)換)

    ? 源數(shù)據(jù)?如圖所示 ?轉(zhuǎn)換后的數(shù)據(jù) DataTable newdt = dt.AsEnumerable().Where(p = p.Fieldstring(\\\"City\\\") == \\\"武漢\\\").CopyToDataTable().PivotDatatableColToRow(\\\"SDateTime,PM25,PM10,O3,NO2,SO2,CO\\\");

    2024年02月10日
    瀏覽(18)
  • C# Winform DataGridView 控件和 DataTable

    C# Winform DataGridView 控件和 DataTable

    目錄 一、概述 二、DataTable 的用法 1.創(chuàng)建表和列 2.添加行 3.取值和賦值 4.刪除行 5.遍歷 DataTable 6.判斷 DataTable 列中是否存在某個(gè)值 7.設(shè)置主鍵 8.獲取?DataRow 所在的行號(hào) 9.DataTable 轉(zhuǎn)換為 List 10.將 List 轉(zhuǎn)?DataTable 三、DataGridView 的用法 1.綁定數(shù)據(jù) 2.獲取綁定的數(shù)據(jù)源 3.獲取 / 設(shè)置

    2024年02月10日
    瀏覽(29)
  • C# 在控制臺(tái)整齊的輸出 DataTable

    C# 在控制臺(tái)整齊的輸出 DataTable

    效果: 在?Winform 平臺(tái),可以用 DataGridView 這樣的控件來(lái)顯示數(shù)據(jù)庫(kù)的表單數(shù)據(jù),但在 C# 控制臺(tái)項(xiàng)目中,如果有用到數(shù)據(jù)庫(kù)查詢,我們想看看查詢語(yǔ)句的效果,就比較困難了,比如,我隨意寫了一個(gè)控制臺(tái)輸出,代碼如下: 效果: 在 Navicat 16 for MySQL 軟件中的查詢結(jié)果 由于沒

    2024年02月12日
    瀏覽(98)
  • C#中將DataTable轉(zhuǎn)化成ListT的方法解析

    在C#中,數(shù)據(jù)的操作是至關(guān)重要的一個(gè)方面,常常需要將數(shù)據(jù)從一個(gè)形式轉(zhuǎn)換成另一個(gè)形式以滿足我們的需求。其中,DataTable和List是常見的兩種數(shù)據(jù)形式。DataTable是一種表格形式的數(shù)據(jù)類型,它以行和列的形式存儲(chǔ)數(shù)據(jù)。List是一種集合類型,它可以存儲(chǔ)任意類型的對(duì)象,并且

    2024年02月16日
    瀏覽(20)
  • C#獲取DataTable的前N行數(shù)據(jù)然后按指定字段排序

    C#獲取DataTable的前N行數(shù)據(jù)然后按指定字段排序

    可以使用以下三種代碼: 控制臺(tái)應(yīng)用程序FilterDataTableDemo ?

    2024年02月11日
    瀏覽(23)
  • c# 實(shí)現(xiàn)sql查詢DataTable數(shù)據(jù)集 對(duì)接SqlSugar ORM

    有時(shí)候?qū)τ谝呀?jīng)查詢到的數(shù)據(jù)集,想要進(jìn)行二次篩選或者查詢,還得再查一遍數(shù)據(jù)庫(kù) 或者其他的一些邏輯處理不太方便,就想著為什么不能直接使用sql來(lái)查詢DataTable呢? 搜索全網(wǎng)沒找到可用方案,所以自己實(shí)現(xiàn)了一個(gè)。 主要實(shí)現(xiàn)思路是使用 SQLite In-Memory Database 內(nèi)存數(shù)據(jù)庫(kù),

    2024年02月12日
    瀏覽(23)
  • 循環(huán)可變化的集合 數(shù)組 datatable 等 || c# winfrom DataGridView 動(dòng)態(tài)UI下載功能

    循環(huán)可變化的集合 數(shù)組 datatable 等 || c# winfrom DataGridView 動(dòng)態(tài)UI下載功能

    ? ? ? 1,使用組件DataGridView 2,使用DataSource來(lái)控制表格展示的數(shù)據(jù)來(lái)源(注意:來(lái)源需要是DataTable類型) 3,需要用到異步線程。如果是不控制數(shù)據(jù)源的話,需要使用UI安全線程;(使用Control.Invoke或Control.BeginInvoke方法) 4,DataGridView的列如果設(shè)置圖片,盡量代碼設(shè)置 5,DataT

    2024年02月19日
    瀏覽(24)
  • C#創(chuàng)建DataTable并填充數(shù)據(jù),按鈕事件實(shí)現(xiàn)全選,并到全選的值。wpf開發(fā)

    wpf開發(fā)中,用事件創(chuàng)建一個(gè)datatable度填充到datagird里面,在datagrid里面有第一列是復(fù)選框。用一單擊事件實(shí)現(xiàn)全選,用一個(gè)按鈕事件得到所選中的值。 Window x:Class=\\\"WpfApp4.MainWindow\\\" ? ? ? ? xmlns=\\\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\\\" ? ? ? ? xmlns:x=\\\"http://schemas.microsoft.com

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包