1. System.Data.DataTable GetDataFromExcelByCom(bool hasTitle, string fileName)
  2. {
  3. //OpenFileDialog openFile = new OpenFileDialog();
  4. //openFile.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls";
  5. //openFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  6. //openFile.Multiselect = false;
  7. //if (openFile.ShowDialog() == DialogResult.Cancel) return null;
  8. //var excelFilePath = openFile.FileName;
  9.  
  10. Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
  11. Sheets sheets;
  12. object oMissiong = System.Reflection.Missing.Value;
  13. Workbook workbook = null;
  14. System.Data.DataTable dt = new System.Data.DataTable();
  15.  
  16. try
  17. {
  18. if (app == null) return null;
  19. workbook = app.Workbooks.Open(fileName, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,
  20. oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
  21. sheets = workbook.Worksheets;
  22.  
  23. //将数据读入到DataTable中
  24. Worksheet worksheet = (Worksheet)sheets.get_Item(1);//读取第一张表
  25. if (worksheet == null) return null;
  26.  
  27. int iRowCount = worksheet.UsedRange.Rows.Count;
  28. int iColCount = worksheet.UsedRange.Columns.Count;
  29. //生成列头
  30. for (int i = 0; i < iColCount; i++)
  31. {
  32. var name = "column" + i;
  33. if (hasTitle)
  34. {
  35. var txt = ((Range)worksheet.Cells[1, i + 1]).Text.ToString();
  36. if (!string.IsNullOrEmpty(txt)) name = txt;
  37. }
  38. while (dt.Columns.Contains(name)) name = name + "_1";//重复行名称会报错。
  39. dt.Columns.Add(new DataColumn(name, typeof(string)));
  40. }
  41. //生成行数据
  42. Range range;
  43. int rowIdx = hasTitle ? 2 : 1;
  44. for (int iRow = rowIdx; iRow <= iRowCount; iRow++)
  45. {
  46. DataRow dr = dt.NewRow();
  47. for (int iCol = 1; iCol <= iColCount; iCol++)
  48. {
  49. range = (Range)worksheet.Cells[iRow, iCol];
  50. dr[iCol - 1] = (range.Value2 == null) ? "" : range.Text.ToString();
  51. }
  52. dt.Rows.Add(dr);
  53. }
  54.  
  55. return dt;
  56. }
  57. catch { return null; }
  58. finally
  59. {
  60. workbook.Close(false, oMissiong, oMissiong);
  61. System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
  62. workbook = null;
  63. app.Workbooks.Close();
  64. app.Quit();
  65. System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
  66. app = null;
  67. }
  68. }

  

c# excel转换为DataTable的更多相关文章

  1. NPOI 将excel转换为datatable或者将datatable转换为excel

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 【数据传输 2】批量导入的前奏:将Excel表中的数据转换为DataTable类型

    导读:我们知道,在数据库中,数据集DataSet是由多张DataTable表组成.所以,如果我们需要将数据从外部导入到数据库中,那么要做的很重要的一步是将这些数据转换为数据库可以接受的结构.今天在用S ...

  3. C# Excel To DataTable

    原地址忘了 需引用NPOI,引用方法:项目引用那儿右键 => 管理NuGet程序包 => 游览 =>输入NPOI =>选中NPOI后安装(一般是第一个) /// <sum ...

  4. C# Excel转换为Json

    demo:https://files.cnblogs.com/files/guxingy/Excel%E8%BD%AC%E6%8D%A2%E4%B8%BAJson%E5%AF%B9%E8%B1%A1. ...

  5. 【c#操作office】--OleDbDataAdapter 与OleDbDataReader方式读取excel,并转换为datatable

    OleDbDataAdapter方式: /// <summary> /// 读取excel的表格放到DataTable中 ---OleDbDataAdapter /// </summ ...

  6. linq之将IEnumerable<T>类型的集合转换为DataTable类型 (转载)

    在考虑将表格数据导出成excel的时候,网上搜的时候找到一个特别合适的公共方法,可以将query查询出来的集合转换为datatable 需引用using System.Reflection; publ ...

  7. 将List中部分字段转换为DataTable中

    由于原来方法导出数据量比较大 的时候,出现卡顿现象:搜索简单改造:(下面方法借助NPIO) /// <summary> /// 将List中原文和译文转换为Datatable /// &l ...

  8. 常用方法 Excel转换为DataSet

    注意一下Excel格式,我平时导入的是xlsx /// <summary> /// Excel 转换为 DataSet /// </summary> /// <param ...

  9. 对象列表转换为DataTable或DataTable转换为对象列表.

    /**********************************************************************************/ // 说明: 数据转换工具. ...

随机推荐

  1. 计算mysql 数据库 表大小 服务器传输 小写表明转成大写

    //数据库表存储大小 select table_schema,table_name,table_rows,concat(round(data_length/1024/1024/1024,2),'GB' ...

  2. linux堆栈

    linux堆栈 进 程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态 ...

  3. Base64转Blob

    最近碰见一个问题,a链接的href为base64,但在chrome下载时显示下载失败,经查询,base64过大会在某些浏览器上下载失败(如新版chrome),解决方法是将base64转为blob fu ...

  4. kernel command line 参数详解

    Linux内核在启动的时候,能接收某些命令行选项或启动时参数.当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核.  如果不使用启动管 ...

  5. 设置CentOS7虚拟机使用静态IP上网

    一.在VMware里,依次点击”编辑“ - ”虚拟网络编辑器“,如下图,我选择的是NAT模式: 为了能够使用静态IP,这里不要勾选”使用本地DHCP服务将IP分配给虚拟机“这个选项.然后是配置子网ip ...

  6. LeetCode——Longest Repeating Character Replacement

    1. Question Given a string that consists of only uppercase English letters, you can replace any lett ...

  7. Python学习札记(十五) 高级特性1 切片

    参考: 高级特性 切片 Note 1.掌握了Python的基础语法之后,就可以写出很多很有用的程序了,比如打印1-90的奇数: #!/usr/bin/env python3 L = [] n = 1 ...

  8. linux一键安装nginx脚本

    #!/bin/sh echo "----------------------------------start install nginx ------------------------- ...

  9. Gym - 100712H Bridges(边—双连通分量)

    https://vjudge.net/problem/Gym-100712H 题意: 给出一个图,求添加一条边后最少的桥数量. 思路: 参考了ZSQ大神的题解http://blog.csdn.net/ ...

  10. java HTTP代码示例

    //测试环境发送用例 @Test public void testSendForTest() {     String url = "http://172.16.30.108:8138/ap ...