C#之Excel操作

下面的这几个方法是我在项目中经常用到的,欢迎大家批评指正

读取Excel表中的数据

第一种:功能丰富,速度慢

     /// <summary>
        /// 从Excel读取数据
        /// </summary>
        /// <param name="path">Excel文档的全路径</param>
        /// <returns>将一行作为一个对象,所以返回的是很多行数据的对象</returns>
        public Model[] ReadDataFromExcel(string path)
        {
            List<Model> list = new List<Model>();
            Application excelApp = null;
            try
            {
                excelApp = new Application() { Visible = false, DefaultFilePath = "", DisplayAlerts = true, SheetsInNewWorkbook = 1 };
                Workbooks books = excelApp.Workbooks;
                if (File.Exists(path))
                {
                    Workbook book = books.Open(path);
                    Worksheet sheet = book.Sheets.get_Item(1);
                    if (sheet != null)
                    {
                        int rowNum = sheet.UsedRange.Rows.Count;
                        DateTime timeLimit;
                        timeLimit = GetTime(((Range)sheet.Cells[2, "B"]).Text.ToString()).AddSeconds(sectionNum*timeSpan*60);

                        //从第2行开始读数据
                        for (int i = 2; i < rowNum; i++)
                        {
                            if (((Range)sheet.Cells[i, "A"]).Text != "" && ((Range)sheet.Cells[i, "B"]).Text != "")
                            {

                                if (timeLimit.CompareTo(GetTime(((Range)sheet.Cells[i, "B"]).Text.ToString())) < 0)
                                {
                                    break;
                                }
                                else
                                {
                                    Model m = new Model()
                                    {
                                        SN = ((Range)sheet.Cells[i, "A"]).Text.ToString(),
                                        time = GetTime(((Range)sheet.Cells[i, "B"]).Text.ToString()),
                                        ch1 = ((Range)sheet.Cells[i, "C"]).Text.ToString(),
                                        ch2 = ((Range)sheet.Cells[i, "D"]).Text.ToString(),
                                        ch3 = ((Range)sheet.Cells[i, "E"]).Text.ToString(),
                                        ch4 = ((Range)sheet.Cells[i, "F"]).Text.ToString()
                                    };
                                    list.Add(m);
                                }

                            }
                        }

                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                //执行完读取Excel数据后,将关闭该进程
                KillExcel(excelApp);
            }
            return list.ToArray();
        }

第二种:速度快

  public DataTable ExcelToDS(string filePath)
        {
            string connStr = "";
            string fileType = System.IO.Path.GetExtension(Path.GetFileName(filePath));
            if (string.IsNullOrEmpty(fileType))
            {
                return null;
            }
            if (fileType == ".xls")
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
            else
                connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";

            OleDbConnection conn = new OleDbConnection(connStr);
            conn.Open();
            string strExcel = "";
            OleDbDataAdapter myCommand = null;
            DataSet ds = null;
            strExcel = "select * from [sheet1$]";
            myCommand = new OleDbDataAdapter(strExcel, connStr);
            ds = new DataSet();
            myCommand.Fill(ds, "table1");
            return ds.Tables[0];
        }

关闭Excel进程:

  [DllImport("user32.dll", SetLastError = true)]
        static extern int GetWindowThreadProcessId(IntPtr hwnd, out int processId);
        public void KillExcel(Application excelApp)
        {
            try
            {
                if(excelApp!=null)
                {
                    int processId;
                    GetWindowThreadProcessId(new IntPtr(excelApp.Hwnd), out processId);
                    Process p = Process.GetProcessById(processId);
                    p.Kill();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

读取Excel单元格数据:

  /// <summary>
        /// 获取单元格数据
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="row"></param>
        /// <param name="col"></param>
        /// <returns></returns>
        public string GetValue(Worksheet sheet, int row, int col)
        {
            // 取得单元格.
            var cell = (Range)sheet.Cells[row, col];
            if ((bool)cell.MergeCells == true)
            {
                // 本单元格是 “合并单元格”
                if (cell.MergeArea.Row == row
                && cell.MergeArea.Column == col)
                {
                    // 当前单元格 就是 合并单元格的 左上角 内容.
                    return cell.Text.ToString();
                }
                else
                {
                    // 返回 合并单元格的 左上角 内容.
                    return ((Range)(sheet.Cells[cell.MergeArea.Row, cell.MergeArea.Column])).Text.ToString();
                }
            }
            else
            {
                // 本单元格是 “普通单元格”
                // 获取文本信息.
                return cell.Text.ToString();
            }
        }

根据文本获取该文本所在行号和所占的行数,一般主要用来读取合并单元格

/// <summary>
      /// 根据文本获取行号和所占行数
      /// </summary>
      /// <param name="sheet">查询的表单</param>
      /// <param name="text">查询的文本</param>
      /// <param name="rowNumber">行号</param>
      /// <param name="rowCounts">所占行数</param>
        public void GetRowNumber(Worksheet sheet, string text,out int rowNumber,out int rowCounts)
        {
            rowNumber = -1;
            rowCounts = -1;
            foreach(Range range in sheet.UsedRange)
            {
                if (range.Value == null)
                    continue;
                if (range.Value.ToString() == text)
                {
                    rowNumber = range.Row;
                    if ((bool)range.MergeCells == true)
                        rowCounts = range.MergeArea.Rows.Count;
                    else
                        rowCounts = 1;
                    break;
                }
            }
        }
时间: 2024-08-25 23:46:21

C#之Excel操作的相关文章

python excel操作及网络编程

python excel操作 一:excel获取值操作 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open_workbook('excelFile.xls') 3.使用技巧 获取一个工作表 table = data.sheets()[0]          #通过索引顺序获取 table = data.sheet_by_index(0) #通过索引顺序获取 table = data.sheet_by_name(u'Sheet1')#通过名称获取

EXCEL 操作

1.为几万行数据加序号 先在A1,A2分别输入1,2,选中A1:A2,双击A2右下角那个小方块. 数据有多少行就会自动填充多少行(要求:B列数据连续) 2.统计一列中单元格的值等于某个值的单元格的个数 =COUNTIF(A1:A10,123) 计算列A1至A10单元格中的值等于123的单元格的个数 EXCEL 操作,布布扣,bubuko.com

C#Excel操作

1.添加对Microsoft.Office.Interop.Excel程序集引用 2.创建Excel应用对象 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 3.Excel操作

Python对Excel操作详解

  Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl  tcom包对excel操作. 关键字: Python.Excel.xlrd.xlwt.xlutils.TCl.tcom     1 Python简介 Python是一种面向对象.直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.

Excel操作类

using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; /// <summary> /// Excel操作类 /// </summary> public class ExcelHelper { #region 数据导出至Excel文件 /// <summary> /// 将数据导出至Excel文件 /// </summa

Python之Excel操作

Python的Excel操作需要另外下载安装对应Python版本的xlrd和xlwt包,用于对Excel的读取和写入. 安装方法:直接解压后,在字符命令界面cd到setup.py的目录,执行命令"Python setup.py install"即可. xlrd(下面有些是方法,有些是属性,属性后面不加括号) 1. excel = xlrd.open_workbook(excel_path):打开指定路径的Excel文件,得到对应Excel的Excel对象(整个Excel文件的对象).

python excel操作总结

1.openpyxl包的导入 Dos命令行输入 pip install openpyxl==2.3.3 这里注意一下openpyxl包的版本问题 版本装的太高有很多api不支持了,所以笔者这里用的是2.3.3 验证是否安装成功:python交互模式下导入包 import openpyxl 2.一个简单的在excel中写入数据的操作 #未从文件系统生成真的excel文件,仅仅是实例化了一个Workbook实例 wb = Workbook()#workbook类似一个excel文件 # wb.act

Delphi Excel操作,写了个ADODataSet转Excel的函数作为后期学习的例子

使用该函数需要先Use Excel2010 //DataSet导出Excel2010格式//FileName=待导出的Excel的文件名,不带路径以及后缀:TitleLine1=导出后Excel第一表头,TitleLine2=Excel第二表头:CellsNames=Excel表格中Field的Title名称://IsOpen=是否马上打开 procedure sysDSetToXlsx(DSet: TADODataSet;FileName,TitleLine1,TitleLine2:Strin

C#常用工具类——Excel操作类

/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> /// <para> CreateConnection:根据Excel文件路径和EXCEL驱动版本生成OleConnection对象实例</para> /// <para> ExecuteDataSet:执行一条SQL语句,返回一个DataSet对象</para>

C# Excel操作类

/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> /// <para> CreateConnection:根据Excel文件路径和EXCEL驱动版本生成OleConnection对象实例</para> /// <para> ExecuteDataSet:执行一条SQL语句,返回一个DataSet对象</para>