利用C#实现对excel的写操作
一.COM interop
首先我们要了解下何为COM Interop,它是一种服务,可以使.NET Framework对象能够与COM对象通信。Visual Studio .NET 通过引入面向公共语言运行时的托管代码概念,改变了开发人员在创建和运行应用程序的方式。但是这也使得它与基于Windows API和COM对象的编程有了本质的去比。Visual Studio .NET让托管对象和非托管对象协同工作的过程能够称为互用性(interoperability),通常简称为interop。
- class ExcelOperator
- {
- //构造函数,列名为输入参数
- public ExcelOperator(List<string> _columnHeader)
- {
- this.ColumnHeader = _columnHeader;
- }
- //打开Excel表头
- public void OpenExcel();
- //输入一条行记录值
- public bool ExportToExcel<T>(IEnumerable<T> _records);
- //保存并关闭
- public bool SaveAndClose();
- }
- public void OpenExcel()
- {
- excelProcess = new ExcelNameSpace.Application();
- if (excelProcess == null) throw new Exception("Excel Application is NULL");
- try
- {
- excelProcess.Visible = false;
- //取消提示,可以直接保存修改后的表格,重要
- excelProcess.DisplayAlerts = false;
- excelProcess.AlertBeforeOverwriting = false;
- workbook = excelProcess.Workbooks.Add();
- worksheet = workbook.Sheets.get_Item();
- worksheet.Name = FileName;
- if (worksheet == null) throw new Exception("Excel WorkSheet is NULL");
- //自动填充表头或其它内容操作
- InitialWorkSheet();
- //格式化excel表单
- FormatWorkSheet();
- this.flagIsOpen = true;
- }
- catch (Exception e)
- {
- ......
- }
- }
大家可以注意到,以上方法还有两个子方法,下面把两个子方法的实现过程简单介绍下:
- /// <summary>
- /// 填充excel表头名称
- /// </summary>
- virtual protected void InitialWorkSheet()
- {
- startRow = ;
- startColumn = ;
- this.worksheet.Cells[startRow, startColumn].Select();
- foreach (string header in this.ColumnHeader)
- {
- this.excelProcess.ActiveCell.Value = header;
- this.excelProcess.ActiveCell.Offset[, ].Select();
- }
- startRow++;
- }
- /// <summary>
- /// 格式化表格
- /// </summary>
- virtual protected void FormatWorkSheet()
- {
- //水平居中
- this.worksheet.Cells.HorizontalAlignment = ExcelNameSpace.XlVAlign.xlVAlignCenter;
- //设置列名框颜色
- var hCell = worksheet.Cells[, this.ColumnHeader.Count];
- this.excelProcess.Range["A1", hCell].Interior.ColorIndex = ;
- this.excelProcess.Range["A1", hCell].Borders.LineStyle = ;
- this.excelProcess.Range["A1", hCell].Borders[ExcelNameSpace.XlBordersIndex.xlEdgeLeft].Weight = ExcelNameSpace.XlBorderWeight.xlThin;
- ......
- }
在InitialWorkSheet()方法中,可以看到有两个全局变量startRow和startColumn,这两个变量就是用来记录下一个有效输入的位置的。
3.插入行记录,我在这里是想实现批量插入记录的功能。为了方便使用,首先编写了一个Record类,含有一个List<string>成员,用来记录单独一行的记录。然后在传入一个List<Record>的参数。其实简单点,直接传输一个List<string>参数,每次单独加一条记录也可以了。不过为了练习。具体代码如下:
- /// <summary>
- /// 利用Record集合添加记录
- /// </summary>
- virtual public bool ExportToExcel<T>(IEnumerable<T> _records) where T : Record
- {
- try
- {
- this.worksheet.Cells[startRow, startColumn].Select();
- foreach (var record in _records)
- {
- this.worksheet.Cells[startRow, startColumn].Select();
- foreach (var item in record)
- {
- this.excelProcess.ActiveCell.Value = item;
- this.excelProcess.ActiveCell.Offset[, ].Select();
- }
- startRow++;
- }
- return true;
- }
- catch(Exception e)
- {
- ......
- }
- }
4.保存并关闭:
- public bool SaveAndClose()
- {
//用另存为的方式保存共工作簿,利用GenerateFileURL()产生文件存储路径- this.workbook.SaveAs(GenerateFileURL());
- this.workbook.Close();
- this.flagIsOpen = false;
//关闭进程- this.excelProcess.Quit();
//保证释放非托管对象- System.Runtime.InteropServices.Marshal.ReleaseComObject(this.excelProcess);
- this.excelProcess = null;
- return true;
- }
5.ExcelOperator类还包含了FileName(文件名)、FilePath(文件存储路径)等属性,请自行进行实现。
利用C#实现对excel的写操作的更多相关文章
- 通过vb.net 和NPOI实现对excel的读操作
通过vb.net 和NPOI实现对excel的读操作,很久很久前用过vb,这次朋友的代码是vb.net写的需要一个excel的操作, 就顾着着实现功能了,大家凑合着看吧 Option Explicit ...
- 使用jxl操作之一: 实现对Excel简单读写操作
项目目录树 对象类UserObject UserObject.java package com.dlab.jxl; public class UserObject { private String u ...
- 使用POI来实现对Excel的读写操作
事实上我感觉直接贴代码就好了.代码里面差点儿做到每一行一个凝视.应该看起来会比較简单 代码托管在github上:https://github.com/chsj1/ExcelUtils package ...
- JAVA-----基于POI实现对Excel导入
在日常项目开发中, 数据录入和导出是十分普遍的需求,因此,导入导出也成为了开发中一个经典的功能.数据导出的格式一般是excel或者pdf,而批量导入的信息一般是借助excel来减轻工作量,提高效率. ...
- Python中实现对list做减法操作介绍
Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...
- Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能
4种开源Excel读写类库与MS Excel类库写操作对比 软件开发过程中,经常需要将数据保存为.xls或.xlsx文件.之前发现微软提供的Microsoft.Office.Interop.Excel ...
- Python实现对excel的操作
1.操作excel使用第三方库openpyxl安装:pip install openpyxy引入:import openpyxl2.常用简单操作1)打开excel文件获取工作簿wb = openpyx ...
- 使用代理实现对C# list distinct操作
范型在c#编程中经常使用,而经常用list 去存放实体集,因此会设计到对list的各种操作,比较常见的有对list进行排序,查找,比较,去重复.而一般的如果要对list去重复如果使用linq dist ...
- 在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)
前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Ex ...
随机推荐
- 一天一点MySQL复习——存储过程
一.存储过程概念 使用SQL编写访问数据库的代码时,可用两种方法存储和执行这些代码,一种是在客户端存储代码,并创建向数据库服务器发送的SQL命令(或SQL语句),比如在C#.Java等客户端编程语言中 ...
- Android布局文件夹引起的问题
Android 运行到setContentView(R.layout.splash); 总是出现如下的错误: java.lang.RuntimeException: Unable to start a ...
- 在Linux上安装多Jboss个需要修改的端口
如果在一台机器上部署了多个jboss server,需要修改相关端口以避免端口冲突.目前确认需要修改的配置如下一.vi $JBOSS_HOME/server/default/conf/jboss-se ...
- T-SQL:SQL Server-SQL语句大全经典
ylbtech-SQL Server-Doc-Help:SQL Server-SQL语句大全经典 SQL Server 流程控制中的 While 语句. 1,SQL语句大全经典返回顶部 .说明:创建数 ...
- Dubbo原理解析-注册中心之Zookeeper协议注册中心
下面我们来看下开源dubbo推荐的业界成熟的zookeeper做为注册中心, zookeeper是hadoop的一个子项目是分布式系统的可靠协调者,他提供了配置维护,名字服务,分布式同步等服务.对于z ...
- android命名规范
Android 开发规范 (陈杨) (一)注意事项 1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了. 2. 缩进统一为4个空格,将Tab si ...
- Javascript 中的小括号 “()” 的多义性
Javascript 中小括号有5 种语义 语义1:函数声明时参数表 1 function func(arg1, arg2){ 2 // ... 3 } 语义2:和一些语句联合使用以 ...
- C# 类和结构
类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 . 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 例如,如 果一个类表示一个顾客,就可以定义字段 Cus ...
- webstorm启动bug
场景描述: win10系统下,webstorm(32位)经常遇到无法启动的情况. 解决方案: 重启电脑. 1.win10系统需要更新时,webstorm无法启动,此为win10 bug,重启时,系统自 ...
- 推荐一款C#反编译软件(开源)
大二的时候老师要求做过一个小项目,大概4个人左右一组.当时交流不是特别到位,项目在一个同学的电脑上建成了就一直在他的电脑上(所以好东西不要烂在你的硬盘里),也不知道什么源码管理,可悲到项目做完我还没有 ...