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

读取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. 10分钟快速入门Redis

    Redis安装 来源:https://github.com/jaywcjlove/handbook 官方编译安装 $ wget http://download.redis.io/releases/re ...

  2. mysql新手入门随笔2

    17.创建表 CREATE TABLE tbname(columnname1 类型 约束条件, columnname2 类型 约束条件,-); 三大类型:数值型,时间日期型,字符串类型 六大约束条件: ...

  3. logback常用配置详解及logback简介

    logback 简介(一) Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J 这 ...

  4. i/10和i取最后两位的精妙算法(前方高能)

    i/10; q2 = (i2 * 52429) >>> (16+3); 52429/524288 = 0.10000038146972656, 524288 = 1 << ...

  5. SpagoBi开发示例——员工离职人数统计

    1.开发工具:SpagoBIStudio_5.1,操作界面和使用方法和eclipse没差 安装参考:http://www.cnblogs.com/starlet/p/4778334.html   2. ...

  6. winform 适配high dpi

    在 mainifest文件中添加:(新建mainifest文件的时候以下内容是有的,只要取消注释就可以了) <compatibility xmlns="urn:schemas-micr ...

  7. 第2次作业:软件分析之Steam

    1. 作业内容 1.1 介绍产品相关信息 你选择的产品是? 我选择的分析的软件为STEAM 为什么选择该产品作为分析? 在上述列表中的产品,除了王者荣耀,其他几项都是平时我使用较为频繁的软件,所以最初 ...

  8. alpha冲刺第四天

    一.合照 二.项目燃尽图 三.项目进展 今天实现了登录界面和服务器的连接了,牵手成功. 一些具体的界面细化实现,一些button的响应实现 四.明日规划 登录界面和服务器的连接实现耗费了太多时间,接下 ...

  9. Beta敏捷冲刺每日报告——Day2

    1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.2 00:00 -- 2017.11.3 00:00 讨论时间地点 2017.11.2 晚9:30,电话会议会议 ...

  10. Scrum 冲刺 第七日

    Scrum 冲刺 第七日 站立式会议 燃尽图 今日任务安排 项目发布说明 站立式会议 返回目录 燃尽图 返回目录 今日任务安排 返回目录 项目发布说明 本版本的新功能 不只是简单打地鼠,还有一些不能打 ...