1.添加Excel引用

可以在.Net选项卡下添加Microsoft.Office.Interop.Excel引用,或在COM下添加Microsoft Excel 12.0 Object Library。它们都会生成Microsoft.Office.Interop.Excel.dll。

2.创建Excel。

有两种方法创建一个Excel Workbook实例。

1.需要一个模板文件,使用Open方法,参数较多:

object miss = Missing.Value;
Application excelApp = new Application();
excelApp.Workbooks.Open(TemplateName, miss, true, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss);

其中Open方法的第一个和第三个参数是模板名称(路径)和是否只读。其余参数一般不需要设置。这里将原文件设为只读,因为不会对模板文件进行修改。

2.不需要模板文件,使用Add方法,只需要一个参数:

object miss = Missing.Value;
Application excelApp = new Application();
excelApp.Workbooks.Add(miss);

3.向Excel中插入数据表

插入数据表的方法比较简单,使用之前生成的WorkBook中的WorkSheet,向里面添加二维数据,需要调用WorkSheet接口的get_Range方法获取插入区域,然后通过Value2(忽略格式)赋值。

Worksheet workSheet= (Worksheet)excelApp.Worksheets[2];
int rowCount = 20;
int colCount = 5;
object[,] dataArray = new object[rowCount, colCount];
Random rand = new Random(DateTime.Now.Millisecond);
for(int i = 0; i < rowCount ;i++)
{for(int j=0;j<colCount;j++){dataArray[i, j] = i+j;}
}
workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[rowCount, colCount]).Value2 = dataArray;
workSheet = null;

第一行,直接用excelApp中的Worksheet,是因为默认的Workbook是Workbooks[1],也就是直接取Workbooks[1]中的Worksheets放入Application对象的Worksheets属性中。

倒数第二行,get_Range方法中的两个参数分别是要插入数据区域的起始和中止坐标(左上角坐标为【1,1】)。这里直接将二维数组插入表格比一点一点插入每个格子效率高些。

4.修改Excel表格样式

设置表格样式主要是设置Range类对象的属性。和插入数据类似,通过Worksheet的get_Range方法获得需要设置样式的区域,设置相应的属性改变样式。

Range range = workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[1, colCount]);
range.Interior.Color = 255 ;    //设置区域背景色。
range.Font.Bold = true;    //设置字体粗体。
range.BorderAround(XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, 15);    //设置区域边框

几乎所有可以通过图形界面对Excel格式的设置,包括公式、排序等都可以在这里设置。不过由于属性和方法没有详细的说明,所以需要一点点慢慢摸索……

5.向Excel中插入图表

插入图表则主要是操作ChartObject对象和Chart对象。

//设置图表大小。
ChartObject chartObj = charts.Add(0, 0, 400, 300);
Chart chart = chartObj.Chart;
//设置图表数据区域。
Range range = workSheet.get_Range("A1", "E10");
chart.ChartWizard(range, XlChartType.xl3DColumn,miss,XlRowCol.xlColumns, 1, 1, true, "标题", "X轴标题", "Y轴标题", miss);
//将图表移到数据区域之下。
chartObj.Left = Convert.ToDouble(range.Left);
chartObj.Top = Convert.ToDouble(range.Top) + Convert.ToDouble(range.Height);

其中设置图表区域比较关键,区域中包含了标题行。ChartWizard的第二个参数指明了图表的类型,第四个参数指明了以行还是列的值作为一个数据系列,第五个参数和第六个参数则指明分别作为横轴坐标和系列名称的单元格。

以Line类型图表为例,数据如下:

0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10
7 8 9 10 11
8 9 10 11 12
9 10 11 12 13

那么根据第四个参数的不同会有两种不同图表:

chart.ChartWizard(range, XlChartType.xlLine,miss,XlRowCol.xlRows, 1, 1, true, "标题", "X轴标题", "Y轴标题", miss);

在PlotBy Row的时候,会以一行的数据为一个数据系列画一条线,并把第每行的一列值作为这一条线的标题,而把第一行的每一列作为该线的横坐标。

chart.ChartWizard(range, XlChartType.xlLine,miss,XlRowCol.xlColumns, 1, 1, true, "标题", "X轴标题", "Y轴标题", miss);

在PlotBy Column的时候,会以一列的数据为一个数据系列画一条线,并把第每列的一行值作为这一条线的标题,而把第一列的每一行作为该线的横坐标。

这两种模式相同点就在于,它们都是以坐标格内的值作为纵坐标的。这里需要注意的是,如果第五和第六个参数改为2,并不是取行的第二列或列的第二行作为标题,而是取前两行或前两列,比如:

chart.ChartWizard(range, XlChartType.xlLine,miss,XlRowCol.xlColumns, 2, 0, true, "标题", "X轴标题", "Y轴标题", miss);

由于系列标题设置为0,所以使用了默认的“系列X”作为标题,而横坐标则取了每列的前两行,所以共有三条线,每条线上10个点。

6.保存Excel

保存前,需要先刷新,使新的记录能被记下:

Workbook workBook = excelApp.Workbooks[1];
workBook.RefreshAll();

之后的保存,也有两种方法:

1.直接保存,当之前通过Open方法创建Excel文件,并没有设为只读时,可以用这种方法,比较简单:

Workbook workBook = excelApp.Workbooks[1];
workBook.Save();

2.这一种方法的比较灵活,就是SaveAs(),相当于界面操作的另存为,但这个方法的问题和创建Workbook时的第一种方法一样,参数比较多,虽然大部分可以用miss。

Workbook workBook = excelApp.Workbooks[1];
object miss = Missing.Value;
workBook.SaveAs(path, miss, miss, miss, miss, miss, XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);

保存之后要关闭WorkBook:

workBook.Close(false, miss, miss);
workBook = null;

7.最后需要清空内存

excelApp.Quit();
excelApp = null;
GC.Collect();

转载于:https://www.cnblogs.com/smjack/archive/2009/02/25/1398257.html

【原】.Net创建Excel文件(插入数据、修改格式、生成图表)的方法相关推荐

  1. Java操作excel文件插入数据

    读取一个表数据根据自己的需求将数据插入到另外一个表中,复制代码下载excel及jar包即可 注意:读取表数据时,表格中的格子没有数据时会读取报错 excel文件及相关jar包: 连接:https:// ...

  2. java使用poi给excel文件插入数据

    excel模板文件 代码 package com.example.demo;import java.io.File; import java.io.FileInputStream; import ja ...

  3. python创建excel_python创建Excel文件数据的方法

    原博文 2018-12-07 18:41 − # -*- coding: utf-8 -*- # @Time : 2018/12/6 17:10 # @Author : suchao # @Disc: ...

  4. 在python中创建Excel文件并写入数据

    来源:<在python中创建Excel文件并写入数据> python中的包xlwt和xlsxwriter都是比较方便创建excel文件并写入数据的. xlwt中: 通过xlwt.Workb ...

  5. python创建Excel文件及写入保存数据

    python创建Excel文件及写入保存数据 创建Excel文件及写入保存数据 文章目录 python创建Excel文件及写入保存数据 一. 创建并保存Excel文档 二.工作表的创建 三.完整代码 ...

  6. python创建excel文件报错_python-通过openpy操作excel

    1.安装 openpyxl pip install openpyxl == 2.3.5  安装指定版本 遇到问题: 查询结果:这是因为电脑上有其他软件也有pip命令,我的电脑上是因为装了loadrun ...

  7. Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 送书活动火爆进行中:董老师又双叒叕送书啦,30本 ...

  8. 2016版excel_Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则

    推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 送书活动火爆进行中:董老师又双叒叕送书啦,30本& ...

  9. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

最新文章

  1. 面试经典题-单链表反转
  2. scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)...
  3. 网站分类前导:获取网站标题和描述及对相关信息进行分词处理
  4. 程序员面试100题之十三:求二叉查找树的镜像
  5. 程序员如何快速消除自己的知识短板?
  6. 过了双十一之后的你。。| 今日最佳
  7. React的列表渲染
  8. 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践
  9. redis学习笔记之虚拟内存
  10. eclipse实用编辑快捷键
  11. PyQGIS开发者手册-4 使用栅格图层
  12. 可汗学院公开课——统计学学习:35-46
  13. [计算机网络]十、TCP的拥塞控制和4个计时器、常用协议原理和命令
  14. 一分钟带你快速认识S参数
  15. [Javascript 高级程序设计]学习心得记录10 js函数表达式
  16. Linux系统中如何创建NFS共享目录
  17. 【英语竞赛】专项练习之听力
  18. 高效经理的五个常用原则
  19. jenkins安装和配置(二):配置第一个项目
  20. [HNOI2011] 卡农 题解

热门文章

  1. java反向映射_opencv 直方图和直方图反向映射
  2. E1 PCM复用设备常见故障及处理方法
  3. 在监控网络项目中该如何选择光纤交换机?
  4. POE以太网交换机产品优势介绍
  5. 【渝粤教育】国家开放大学2018年春季 4996T水土保持技术 参考试题
  6. 升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...
  7. 考试用计算机反思800字,考试反思作文800字
  8. android 设置资源,Android 资源
  9. 福州PHP讲师招聘_“艺”起就业|招聘信息汇总
  10. mysql 过滤相同数据库_MySQL数据库查询中的重复记录过滤