c#读取excel数据的两种方法实现

方法一:OleDb: 用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在 DataTable 中对数据进行一些删减修改。

优点:读取方式简单、读取速度快

缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。

不过一般情况下还是非常不错的。

(代码比原文相较有所修改)

DataTable GetDataFromExcelByConn(bool hasTitle = false)
{
  OpenFileDialog openFile = new OpenFileDialog();
  openFile.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls";
  openFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  openFile.Multiselect = false;
  if (openFile.ShowDialog() == DialogResult.Cancel) return null;
  var filePath = openFile.FileName;
  string fileType = System.IO.Path.GetExtension(filePath);
  if (string.IsNullOrEmpty(fileType)) return null;

  using (DataSet ds = new DataSet())
  {
    string strCon = string.Format("Provider=Microsoft.Jet.OLEDB.{0}.0;" +
            "Extended Properties=\"Excel {1}.0;HDR={2};IMEX=1;\";" +
            "data source={3};",
            (fileType == ".xls" ? 4 : 12), (fileType == ".xls" ? 8 : 12), (hasTitle ? "Yes" : "NO"), filePath);
    string strCom = " SELECT * FROM [Sheet1$]";
    using (OleDbConnection myConn = new OleDbConnection(strCon))
    using (OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn))
    {
      myConn.Open();
      myCommand.Fill(ds);
    }
    if (ds == null || ds.Tables.Count <= 0) return null;
    return ds.Tables[0];
  }
}

方法二:Com组件的方式读取Excel

这种方式需要先引用 Microsoft.Office.Interop.Excel 。首选说下这种方式的优缺点

优点:可以非常灵活的读取Excel中的数据

缺点:如果是Web站点部署在IIS上时,还需要服务器机子已安装了Excel,有时候还需要为配置IIS权限。最重要的一点因为是基于单元格方式读取的,所以数据很慢(曾做过试验,直接读取千行、200多列的文件,直接读取耗时15分钟。即使采用多线程分段读取来提高CPU的利用率也需要8分钟。PS:CPU I3)

需要读取大文件的的童鞋们慎重。。。

(代码比原文相较有所修改)

DataTable GetDataFromExcelByCom(bool hasTitle = false)
{
  OpenFileDialog openFile = new OpenFileDialog();
  openFile.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls";
  openFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  openFile.Multiselect = false;
  if (openFile.ShowDialog() == DialogResult.Cancel) return null;
  var excelFilePath = openFile.FileName;

  Excel.Application app = new Excel.Application();
  Excel.Sheets sheets;
  object oMissiong = System.Reflection.Missing.Value;
  Excel.Workbook workbook = null;
  DataTable dt = new DataTable();

  try
  {
    if (app == null) return null;
    workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,
      oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
    sheets = workbook.Worksheets;

    //将数据读入到DataTable中
    Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//读取第一张表
    if (worksheet == null) return null;

    int iRowCount = worksheet.UsedRange.Rows.Count;
    int iColCount = worksheet.UsedRange.Columns.Count;
    //生成列头
    for (int i = 0; i < iColCount; i++)
    {
      var name = "column" + i;
      if (hasTitle)
      {
        var txt = ((Excel.Range)worksheet.Cells[1, i + 1]).Text.ToString();
        if (!string.IsNullOrWhiteSpace(txt)) name = txt;
      }
      while (dt.Columns.Contains(name)) name = name + "_1";//重复行名称会报错。
      dt.Columns.Add(new DataColumn(name, typeof(string)));
    }
    //生成行数据
    Excel.Range range;
    int rowIdx = hasTitle ? 2 : 1;
    for (int iRow = rowIdx; iRow <= iRowCount; iRow++)
    {
      DataRow dr = dt.NewRow();
      for (int iCol = 1; iCol <= iColCount; iCol++)
      {
        range = (Excel.Range)worksheet.Cells[iRow, iCol];
        dr[iCol - 1] = (range.Value2 == null) ? "" : range.Text.ToString();
      }
      dt.Rows.Add(dr);
    }
    return dt;
  }
  catch { return null; }
  finally
  {
    workbook.Close(false, oMissiong, oMissiong);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
    workbook = null;
    app.Workbooks.Close();
    app.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
    app = null;
  }
}

原文的方法二还提供了多线程处理数据的代码,一并复制到此(此处出现了一个SheetOptions的类型,无法考证其来源,如果知晓,请留言,谢谢。):

/// <summary>
/// 使用COM,多线程读取Excel(1 主线程、4 副线程)
/// </summary>
/// <param name="excelFilePath">路径</param>
/// <returns>DataTabel</returns>
public System.Data.DataTable ThreadReadExcel(string excelFilePath)
{
  Excel.Application app = new Excel.Application();
  Excel.Sheets sheets = null;
  Excel.Workbook workbook = null;
  object oMissiong = System.Reflection.Missing.Value;
  System.Data.DataTable dt = new System.Data.DataTable();

  try
  {
    if (app == null)
    {
      return null;
    }

    workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,
      oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);

    //将数据读入到DataTable中——Start
    sheets = workbook.Worksheets;
    Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//读取第一张表
    if (worksheet == null)
      return null;

    string cellContent;
    int iRowCount = worksheet.UsedRange.Rows.Count;
    int iColCount = worksheet.UsedRange.Columns.Count;
    Excel.Range range;

    //负责列头Start
    DataColumn dc;
    int ColumnID = 1;
    range = (Excel.Range)worksheet.Cells[1, 1];
    //while (range.Text.ToString().Trim() != "")
    while (iColCount >= ColumnID)
    {
      dc = new DataColumn();
      dc.DataType = System.Type.GetType("System.String");

      string strNewColumnName = range.Text.ToString().Trim();
      if (strNewColumnName.Length == 0) strNewColumnName = "_1";
      //判断列名是否重复
      for (int i = 1; i < ColumnID; i++)
      {
        if (dt.Columns[i - 1].ColumnName == strNewColumnName)
          strNewColumnName = strNewColumnName + "_1";
      }

      dc.ColumnName = strNewColumnName;
      dt.Columns.Add(dc);

      range = (Excel.Range)worksheet.Cells[1, ++ColumnID];
    }
    //End 

    //数据大于500条,使用多进程进行读取数据
    if (iRowCount - 1 > 500)
    {
      //开始多线程读取数据
      //新建线程
      int b2 = (iRowCount - 1) / 10;
      DataTable dt1 = new DataTable("dt1");
      dt1 = dt.Clone();
      SheetOptions sheet1thread = new SheetOptions(worksheet, iColCount, 2, b2 + 1, dt1);
      Thread othread1 = new Thread(new ThreadStart(sheet1thread.SheetToDataTable));
      othread1.Start();

      //阻塞 1 毫秒,保证第一个读取 dt1
      Thread.Sleep(1);

      DataTable dt2 = new DataTable("dt2");
      dt2 = dt.Clone();
      SheetOptions sheet2thread = new SheetOptions(worksheet, iColCount, b2 + 2, b2 * 2 + 1, dt2);
      Thread othread2 = new Thread(new ThreadStart(sheet2thread.SheetToDataTable));
      othread2.Start();

      DataTable dt3 = new DataTable("dt3");
      dt3 = dt.Clone();
      SheetOptions sheet3thread = new SheetOptions(worksheet, iColCount, b2 * 2 + 2, b2 * 3 + 1, dt3);
      Thread othread3 = new Thread(new ThreadStart(sheet3thread.SheetToDataTable));
      othread3.Start();

      DataTable dt4 = new DataTable("dt4");
      dt4 = dt.Clone();
      SheetOptions sheet4thread = new SheetOptions(worksheet, iColCount, b2 * 3 + 2, b2 * 4 + 1, dt4);
      Thread othread4 = new Thread(new ThreadStart(sheet4thread.SheetToDataTable));
      othread4.Start();

      //主线程读取剩余数据
      for (int iRow = b2 * 4 + 2; iRow <= iRowCount; iRow++)
      {
        DataRow dr = dt.NewRow();
        for (int iCol = 1; iCol <= iColCount; iCol++)
        {
          range = (Excel.Range)worksheet.Cells[iRow, iCol];
          cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
          dr[iCol - 1] = cellContent;
        }
        dt.Rows.Add(dr);
      }

      othread1.Join();
      othread2.Join();
      othread3.Join();
      othread4.Join();

      //将多个线程读取出来的数据追加至 dt1 后面
      foreach (DataRow dr in dt.Rows)
        dt1.Rows.Add(dr.ItemArray);
      dt.Clear();
      dt.Dispose();

      foreach (DataRow dr in dt2.Rows)
        dt1.Rows.Add(dr.ItemArray);
      dt2.Clear();
      dt2.Dispose();

      foreach (DataRow dr in dt3.Rows)
        dt1.Rows.Add(dr.ItemArray);
      dt3.Clear();
      dt3.Dispose();

      foreach (DataRow dr in dt4.Rows)
        dt1.Rows.Add(dr.ItemArray);
      dt4.Clear();
      dt4.Dispose();

      return dt1;
    }
    else
    {
      for (int iRow = 2; iRow <= iRowCount; iRow++)
      {
        DataRow dr = dt.NewRow();
        for (int iCol = 1; iCol <= iColCount; iCol++)
        {
          range = (Excel.Range)worksheet.Cells[iRow, iCol];
          cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
          dr[iCol - 1] = cellContent;
        }
        dt.Rows.Add(dr);
      }
    }
    //将数据读入到DataTable中——End
    return dt;
  }
  catch
  {
    return null;
  }
  finally
  {
    workbook.Close(false, oMissiong, oMissiong);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
    workbook = null;
    app.Workbooks.Close();
    app.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
    app = null;
    GC.Collect();
    GC.WaitForPendingFinalizers();
  }
}

补充SheetOptions代码:

class SheetOptions
{
  Microsoft.Office.Interop.Excel.Worksheet worksheet;
  int iColCount;
  int star;
  int end;
  System.Data.DataTable dt;
  public SheetOptions(Microsoft.Office.Interop.Excel.Worksheet worksheet, int iColCount, int star, int end, System.Data.DataTable dt)
  {
    this.worksheet = worksheet;
    this.iColCount = iColCount;
    this.star = star;
    this.end = end;
    this.dt = dt;
  }

  public void SheetToDataTable()
  {
    string cellContent;
    Microsoft.Office.Interop.Excel.Range range;
    for (int iRow = star; iRow <= end; iRow++)
    {
      System.Data.DataRow dr = dt.NewRow();
      for (int iCol = 1; iCol <= iColCount; iCol++)
      {
        range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[iRow, iCol];
        cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
        dr[iCol - 1] = cellContent;
      }
      dt.Rows.Add(dr);
    }
  }
}

原文还提供了第三种方法,感兴趣的可以关心一下:

方法三:NPOI方式读取Excel,NPOI是一组开源的组件,类似Java的 POI。包括:NPOI、NPOI.HPSF、NPOI.HSSF、NPOI.HSSF.UserModel、NPOI.POIFS、NPOI.Util,下载的时候别只下一个噢

优点:读取Excel速度较快,读取方式操作灵活性

缺点:只支持03的Excel,xlsx的无法读取。由于这点,使用这种方式的人不多啊,没理由要求客户使用03版Excel吧,再说03版Excel对于行数还有限制,只支持65536行。

(听他们的开发人员说会在2012年底推出新版,支持xlsx的读取。但一直很忙没时间去关注这个事情,有兴趣的同学可以瞧瞧去)

using System;
using System.Data;
using System.IO;
using System.Web;
using NPOI;
using NPOI.HPSF;
using NPOI.HSSF;
using NPOI.HSSF.UserModel;
using NPOI.POIFS;
using NPOI.Util;
using System.Text;
using System.Configuration;

public class NPOIHelper
{
  private static int ExcelMaxRow = Convert.ToInt32(ConfigurationManager.AppSettings["ExcelMaxRow"]);
  /// <summary>
  /// 由DataSet导出Excel
  /// </summary>
  /// <param name="sourceTable">要导出数据的DataTable</param>
  /// <param name="sheetName">工作表名称</param>
  /// <returns>Excel工作表</returns>
  private static Stream ExportDataSetToExcel(DataSet sourceDs)
  {
    HSSFWorkbook workbook = new HSSFWorkbook();
    MemoryStream ms = new MemoryStream();

    for (int i = 0; i < sourceDs.Tables.Count; i++)
    {
      HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet(sourceDs.Tables[i].TableName);
      HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
      // handling header.
      foreach (DataColumn column in sourceDs.Tables[i].Columns)
        headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
      // handling value.
      int rowIndex = 1;
      foreach (DataRow row in sourceDs.Tables[i].Rows)
      {
        HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
        foreach (DataColumn column in sourceDs.Tables[i].Columns)
        {
          dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
        }
        rowIndex++;
      }
    }
    workbook.Write(ms);
    ms.Flush();
    ms.Position = 0;
    workbook = null;
    return ms;
  }
  /// <summary>
  /// 由DataSet导出Excel
  /// </summary>
  /// <param name="sourceTable">要导出数据的DataTable</param>
  /// <param name="fileName">指定Excel工作表名称</param>
  /// <returns>Excel工作表</returns>
  public static void ExportDataSetToExcel(DataSet sourceDs, string fileName)
  {
    //检查是否有Table数量超过65325
    for (int t = 0; t < sourceDs.Tables.Count; t++)
    {
      if (sourceDs.Tables[t].Rows.Count > ExcelMaxRow)
      {
        DataSet ds = GetdtGroup(sourceDs.Tables[t].Copy());
        sourceDs.Tables.RemoveAt(t);
        //将得到的ds插入 sourceDs中
        for (int g = 0; g < ds.Tables.Count; g++)
        {
          DataTable dt = ds.Tables[g].Copy();
          sourceDs.Tables.Add(dt);
        }
        t--;
      }
    }

    MemoryStream ms = ExportDataSetToExcel(sourceDs) as MemoryStream;
    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
    HttpContext.Current.Response.BinaryWrite(ms.ToArray());
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    //HttpContext.Current.Response.End();
    ms.Close();
    ms = null;
  }
  /// <summary>
  /// 由DataTable导出Excel
  /// </summary>
  /// <param name="sourceTable">要导出数据的DataTable</param>
  /// <returns>Excel工作表</returns>
  private static Stream ExportDataTableToExcel(DataTable sourceTable)
  {
    HSSFWorkbook workbook = new HSSFWorkbook();
    MemoryStream ms = new MemoryStream();
    HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet(sourceTable.TableName);
    HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
    // handling header.
    foreach (DataColumn column in sourceTable.Columns)
      headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
    // handling value.
    int rowIndex = 1;
    foreach (DataRow row in sourceTable.Rows)
    {
      HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
      foreach (DataColumn column in sourceTable.Columns)
      {
        dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
      }
      rowIndex++;
    }
    workbook.Write(ms);
    ms.Flush();
    ms.Position = 0;
    sheet = null;
    headerRow = null;
    workbook = null;
    return ms;
  }
  /// <summary>
  /// 由DataTable导出Excel
  /// </summary>
  /// <param name="sourceTable">要导出数据的DataTable</param>
  /// <param name="fileName">指定Excel工作表名称</param>
  /// <returns>Excel工作表</returns>
  public static void ExportDataTableToExcel(DataTable sourceTable, string fileName)
  {
    //如数据超过65325则分成多个Table导出
    if (sourceTable.Rows.Count > ExcelMaxRow)
    {
      DataSet ds = GetdtGroup(sourceTable);
      //导出DataSet
      ExportDataSetToExcel(ds, fileName);
    }
    else
    {
      MemoryStream ms = ExportDataTableToExcel(sourceTable) as MemoryStream;
      HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
      HttpContext.Current.Response.BinaryWrite(ms.ToArray());
      HttpContext.Current.ApplicationInstance.CompleteRequest();
      //HttpContext.Current.Response.End();
      ms.Close();
      ms = null;
    }
  }

  /// <summary>
  /// 传入行数超过65325的Table,返回DataSet
  /// </summary>
  /// <param name="dt"></param>
  /// <returns></returns>
  public static DataSet GetdtGroup(DataTable dt)
  {
    string tablename = dt.TableName;

    DataSet ds = new DataSet();
    ds.Tables.Add(dt);

    double n = dt.Rows.Count / Convert.ToDouble(ExcelMaxRow);

    //创建表
    for (int i = 1; i < n; i++)
    {
      DataTable dtAdd = dt.Clone();
      dtAdd.TableName = tablename + "_" + i.ToString();
      ds.Tables.Add(dtAdd);
    }

    //分解数据
    for (int i = 1; i < ds.Tables.Count; i++)
    {
      //新表行数达到最大 或 基表数量不足
      while (ds.Tables[i].Rows.Count != ExcelMaxRow && ds.Tables[0].Rows.Count != ExcelMaxRow)
      {
        ds.Tables[i].Rows.Add(ds.Tables[0].Rows[ExcelMaxRow].ItemArray);
        ds.Tables[0].Rows.RemoveAt(ExcelMaxRow);

      }
    }

    return ds;
  }

  /// <summary>
  /// 由DataTable导出Excel
  /// </summary>
  /// <param name="sourceTable">要导出数据的DataTable</param>
  /// <param name="fileName">指定Excel工作表名称</param>
  /// <returns>Excel工作表</returns>
  public static void ExportDataTableToExcelModel(DataTable sourceTable, string modelpath, string modelName, string fileName, string sheetName)
  {
    int rowIndex = 2;//从第二行开始,因为前两行是模板里面的内容
    int colIndex = 0;
    FileStream file = new FileStream(modelpath + modelName + ".xls", FileMode.Open, FileAccess.Read);//读入excel模板
    HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
    HSSFSheet sheet1 = (HSSFSheet)hssfworkbook.GetSheet("Sheet1");
    sheet1.GetRow(0).GetCell(0).SetCellValue("excelTitle");   //设置表头
    foreach (DataRow row in sourceTable.Rows)
    {  //双循环写入sourceTable中的数据
      rowIndex++;
      colIndex = 0;
      HSSFRow xlsrow = (HSSFRow)sheet1.CreateRow(rowIndex);
      foreach (DataColumn col in sourceTable.Columns)
      {
        xlsrow.CreateCell(colIndex).SetCellValue(row[col.ColumnName].ToString());
        colIndex++;
      }
    }
    sheet1.ForceFormulaRecalculation = true;
    FileStream fileS = new FileStream(modelpath + fileName + ".xls", FileMode.Create);//保存
    hssfworkbook.Write(fileS);
    fileS.Close();
    file.Close();
  }
}

到此这篇关于c#读取excel数据的两种方法实现的文章就介绍到这了,更多相关c#读取excel内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#窗体读取EXCEL并存入SQL数据库的方法

    本文实例讲述了C#窗体读取EXCEL并存入SQL数据库的方法.分享给大家供大家参考.具体实现方法如下: windows窗体上放了一个Textbox1,2个按钮button1和button2~按button1选择excel文件~按button2进行相关处理 复制代码 代码如下: private  void button1_click(object sendeer,EventArgs e) {  OpenFileDialog  openFiledialog1=new OpenFileDialog()

  • C#读取Excel到DataTable的方法示例

    前提 在Windows下进行数据处理的时候最常见的情况莫过于读取Microsoft的Excel文件了,Excel的普及率惊人,是事实上的标准.以前的开发中我采用调用第三方类库 NPOI的方式来处理Excel.这个方式有两个缺点: 需要依赖第三方类库NPOI NPOI支持几乎全功能的Office条件,缺点就是复杂度也高. 如果只是简单的导入数据,完全可以有更加简单的方案,方案的限制条件为: 只支持Windows平台 只读取Excel文件 支持xls和xlsx文件格式 依赖 还是有依赖的 2007

  • C#读取Excel并转化成XML的方法

    本文实例讲述了C#读取Excel并转化成Xml的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: XmlDocument excelData = new XmlDocument(); DataSet excelTableDataSet = new DataSet(); StreamReader excelContent = new StreamReader(excelFilePath, System.Text.Encoding.Default); string stringC

  • ASP.NET(C#) 读取EXCEL另加解决日期问题的方法分享

    使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可. 一 在D盘创建excel文件test.xls: 二 将工作表Sheet1的内容读取到DataSet 复制代码 代码如下: string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+   "Extended Properties='Excel 8.0'"; DataSet ds = ne

  • C#实现把txt文本数据快速读取到excel中

    今天预实现一功能,将txt中的数据转到excel表中,做为matlab的数据源.搜集一些c#操作excel的程序.步骤如下: 下载一个Microsoft.Office.Interop.Excel.dll   在项目中引用. 编写代码如下: string path = "c://date//xyu.txt"; StreamReader sr = new StreamReader(path); string strLine = sr.ReadLine(); int rowNum = 1;

  • C#读取Excel的三种方式以及比较分析

    (1)OleDB方式 优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快. 缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个Sheet页读取出来后(结果为Datatable)再在Datatable中根据行列数来获取指定的值. 当Excel数据量很大时.会非常占用内存,当内存不够时会抛出内存溢出的异常. 读取代码如下: public DataTable GetExcelTableByOleDB(string strExcelPath, string tabl

  • c#读取excel数据的两种方法实现

    方法一:OleDb: 用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在 DataTable 中对数据进行一些删减修改. 优点:读取方式简单.读取速度快 缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时.会非常占用内存,当内存不够时会抛出内存溢出的异常. 不过一般情况下还是非常不错的. (代码比原文相较有所修改) DataTable GetDataFromExcelByConn(bool hasTitle = false)

  • C#导入导出Excel数据的两种方法

    本文为大家分享了C#导入导出Excel数据的具体代码,供大家参考,具体内容如下 注:对于实体类对象最好新建一个并且继承原有实体类,这样可以将类型进行修改: 方法一:此种方法是用EPPLUS中的FileInfo流进行读取的(是不是流我还真不太了解,若有懂得请留言,非常感谢了) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tas

  • java读取excel文件的两种方法

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 方式一: 借用 package com.ij34.util; /** * @author Admin * @date 创建时间:2017年8月29日 下午2:07:59 * @version 1.0 *@type_name myclass */ import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet;

  • php原生导出excel文件的两种方法(推荐)

    第一种方法: $filename='文件名称'; $filetitle='你的标题'; if($_POST){ set_time_limit(10000): $title = ''; ini_set('memory_limit','300M'); header('Content-Type: application/vnd.ms-excel;charset=utf-8'); $name = $title.".xls"; header('Content-Disposition: attac

  • Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取excel,并使用Python3操作pymysql模块将数据存入Mysql中,有需要的朋友们一起来看看吧. 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. python操作excel主要用

  • python 读取yaml文件的两种方法(在unittest中使用)

    作者:做梦的人(小姐姐) 出处:https://www.cnblogs.com/chongyou/ python读取yaml文件使用,有两种方式: 1.使用ddt读取 2,使用方法读取ddt的内容,在使用方法中进行调用 1.使用ddt读取 @ddt.ddt class loginTestPage(unittest.TestCase):     @ddt.file_data(path)     @ddt.unpack     def testlogin(self,**kwargs):       

  • python向json中追加数据的两种方法总结

    目录 前言 1. list dump (不推荐) 2. json update (推荐使用) 总结 前言 json以其轻量级的数据交换格式,且易于阅读和编写而使用率很广泛,而使用json的过程中时而需要增加字段,本人验证两种方式之后将其集成梳理. 具体操作详情如下: 1. list dump (不推荐) 采用list方式,向json中添加字段.此法存在一定的问题,不推荐使用. 方法如下: (1)先创建一个列表: json_content = [] (2)将当前json文件中已有的内容读入列表中:

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

  • 使用Java构造和解析Json数据的两种方法(详解一)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法

  • PHP实现更新中间关联表数据的两种方法

    本文以示例形式展示了PHP实现更新中间关联表数据的两种方法.分享给大家供大家参考之用.具体方法如下: 首先,中间关联表:这里的中间表只存表1的主键和表2的主键,即多对多的形式. 执行数据添加和删除为框架内部方法,不属于思路部分. 方法一:先全部删除旧数据,后添加新数据 $res = $this->classes->classEdit($id, $data); //修改主表数据 if($res) { //先删除关联表数据 $bool = $this->lesson_classes->

随机推荐