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

读取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 = };
Workbooks books = excelApp.Workbooks;
if (File.Exists(path))
{
Workbook book = books.Open(path);
Worksheet sheet = book.Sheets.get_Item();
if (sheet != null)
{
int rowNum = sheet.UsedRange.Rows.Count;
DateTime timeLimit;
timeLimit = GetTime(((Range)sheet.Cells[, "B"]).Text.ToString()).AddSeconds(sectionNum*timeSpan*); //从第2行开始读数据
for (int i = ; 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())) < )
{
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[];
}

关闭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 = -;
rowCounts = -;
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 = ;
break;
}
}
}

C#之Excel操作的更多相关文章

  1. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  2. Delphi Excel 操作大全

    Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...

  3. C#EXCEL 操作类--C#ExcelHelper操作类

    主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...

  4. Excel 操作类

    转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...

  5. C# excel操作

    开源的Excel操作项目: http://www.cnblogs.com/lwme/archive/2011/11/27/2265323.html 添加引用:Microsoft Excel 11.0 ...

  6. [Excel操作]Microsoft Office Excel 不能访问文件

    最近,客户服务器迁移,因操作系统环境变化而引起的的环境问题一堆,遇到的问题并解决方法在“[Excel]操作”类别会体现. Microsoft Office Excel 不能访问文件“C:\\LMSEx ...

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

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  8. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  9. C# Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  10. Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    ----转载: http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中 ...

随机推荐

  1. 19.C++-(=)赋值操作符、智能指针编写(详解)

    (=)赋值操作符 编译器为每个类默认重载了(=)赋值操作符 默认的(=)赋值操作符仅完成浅拷贝 默认的赋值操作符和默认的拷贝构造函数有相同的存在意义 (=)赋值操作符注意事项 首先要判断两个操作数是否 ...

  2. Oracle服务器和客户端的安装和卸载

    Oracle 11g服务器与客户端的完全卸载方式与前些版本有了改变: 一.卸载前准备: 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 二.批处理卸载 ...

  3. python全栈学习--day5

    字典 特点:字典是python中唯一的映射类型,采用键值对(key-value) 的形式存数据. 存储大量的数据,是关系型数据,查询数据快. 字典初始说明: 遍历字典从列表开始,列表是从头便利到尾的. ...

  4. Struts2学习笔记一 简介及入门程序

    Struts2是一个基于MVC设计模式的web应用框架,它本质上相当于一个Sevlet.是Struts1的下一代产品,是在structs1和WebWork技术的基础上进行合并后的全新框架(WebWor ...

  5. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  6. 记录python接口自动化测试--主函数(第六目)

    把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...

  7. 第二次作业-关于Steam游戏平台的简单分析

    1.1 Steam平台的简单介绍 你选择的产品是? 如题,这次的作业我选择了Steam作为分析的对象. 为什么选择该产品作为分析? 我选择数字游戏贩售平台STEAM作为分析对象的原因有以下几点: 1. ...

  8. 敏捷冲刺报告--Day5

    敏捷冲刺报告--Day5 情况简介 GUI框架重写, 添加功能 任务进度 赵坤: 后端爬虫bug修复 李世钰: GUI编写 黄亦薇:更新sprint backlog.编写每日报告 王成科:召集小组成员 ...

  9. 异步协程 的 trip库

    import trip headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, ...

  10. 关于安装wordpress出现500 Internal Server Error的解决方案

    安装新版本wordpress出现500 Internal Server Error的问题: 在./wp-includes/class-http.php的268行,改成 $request_order = ...