/// <summary>
/// 出力Excel
/// </summary>
/// <param name="storeModelForExcel"></param>
public void GenerateExcel(List<ExcelModel> excelModelList,string savePath)
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
if (excel == null)
{
return;
}
//设置为不可见,操作在后台执行,为 true 的话会打开 Excel
excel.Visible = false;
//打开时设置为全屏显式
//excel.DisplayFullScreen = true;
//初始化工作簿
Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
//新增加一个工作簿,Add()方法也可以直接传入参数 true
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
var tt = workbook.Worksheets.Count;
try
{
for (int sheetNum = ; sheetNum < excelModelList.Count; sheetNum++)
{
Microsoft.Office.Interop.Excel.Range range;
for (int k = ; k < tt; k++)
{
//设置表的名称
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[k + ];
worksheet.Name = excelModelList[sheetNum].dt.TableName;
range = worksheet.get_Range("A1", System.Reflection.Missing.Value);
range.NumberFormat = "@";
range = range.get_Resize(excelModelList[sheetNum].dt.Rows.Count + , excelModelList[sheetNum].dt.Columns.Count);
string[,] saRet = new string[excelModelList[sheetNum].dt.Rows.Count + , excelModelList[sheetNum].dt.Columns.Count];
//设置列名
for (int i = ; i < excelModelList[sheetNum].dt.Columns.Count; i++)
{
//设置第一行,即列名
saRet[, i] = excelModelList[sheetNum].dt.Columns[i].ColumnName;
}
//跳过第一行,第一行写入了列名
int rowIndex = ;
//写入数据
for (int i = ; i < excelModelList[sheetNum].dt.Rows.Count; i++)
{
for (int j = ; j < excelModelList[sheetNum].dt.Columns.Count; j++)
{
saRet[rowIndex + i, j] = excelModelList[sheetNum].dt.Rows[i][j].ToString();
}
}
range.set_Value(System.Reflection.Missing.Value, saRet);
//设置所有列宽为自动列宽
//worksheet.Columns.AutoFit();
//设置所有单元格列宽为自动列宽
worksheet.Cells.Columns.AutoFit();
}
//新增加一个 Excel 表(sheet)
if (sheetNum < excelModelList.Count - )
{
workbook.Worksheets.Add();
}
}
//是否提示,如果想删除某个sheet页,首先要将此项设为fasle。
excel.DisplayAlerts = false;
//保存写入的数据,这里还没有保存到磁盘
workbook.Saved = true;
////创建文件
FileStream file = new FileStream(savePath, FileMode.CreateNew);
//关闭释放流,不然没办法写入数据
file.Close();
file.Dispose();
////保存到指定的路径
workbook.SaveCopyAs(savePath);
workbook.Close(Type.Missing, Type.Missing, Type.Missing);
excel.Quit();
//关闭进程,防止启动多个,导致内存溢出
IntPtr t = new IntPtr(excel.Hwnd);
int processId = ;
GetWindowThreadProcessId(t, out processId);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(processId);
p.Kill();
}
catch (Exception e)
{
throw e;
}
} [DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);

注意:数据先写到内存saRet,在一次性写进sheet

range.set_Value(System.Reflection.Missing.Value, saRet);

C# 往excel出力数据的更多相关文章

  1. NPOI操作EXCEL(三)——反射机制进行excel表格数据的解析

    我们先来回忆回忆上篇文章讲到的通过xml配置文件实现excel批量模板解析的整体思路: 1.对每个excel模板制定xml配置规则集,实现xml配置文件的解析服务 2.为每个excel模板制定DTO, ...

  2. .net实现与excel的数据交互、导入导出

    应该说,一套成熟的基于web的管理系统,与用户做好的excel表格进行数据交互是一个不可或缺的功能,毕竟,一切以方便客(jin)户(qian)为宗旨. 本人之前从事PHP的开发工作,熟悉PHP的都应该 ...

  3. jxl读取Excel表格数据

    调用jxl包实现Excel表格数据的读取,代码如下: import java.io.File; import java.io.IOException; import java.util.ArrayLi ...

  4. Excel的数据导入到PB的DW中

    Excel的数据导入到PB的DW中//==================================================================== // Event:cb_ ...

  5. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012

    (注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘  要:DataGridView控件作为数据传输的中介,只 ...

  6. 向MySql数据库导入excel表数据

    最近要开发一个小的答题系统,如果题目人工录入那确实很麻烦.所以想到是不是可以从用一些现有数据格式的文件导入数据.在网上查了一下,看到有关于将excel的数据导入到mysql的方法.所以将题库数据整理成 ...

  7. 上传读取Excel文件数据

    /// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...

  8. Excel大数据量分段导入到Oracle

    客户需要将一个具有2W多条数据的Excel表格中的数据导入到Oracle数据库的A表中,开始采用的是利用Oledb直接将数据读入到DataTable中,然后通过拼接InserInto语句来插入到数据库 ...

  9. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

随机推荐

  1. Dockerfile安装KOD可道云

    [root@docker01 base2]# cat Dockerfile FROM centos:6.8 RUN yum install openssh-server -y RUN /etc/ini ...

  2. memcached在Java中的应用以及magent的配置-每天进步一点点

    memcached在Java中的应用: http://nhy520.iteye.com/blog/1775893 magent配置memcached分布式集群的应用: http://www.jians ...

  3. Teradata架构

    Teradata在整体上是按Shared Nothing 架构体系进行组织的,他的定位就是大型数据仓库系统,定位比较高,他的软硬件都是NCR自己的,其他的都不识别:所以一般的企业用不起,价格很贵.由于 ...

  4. RabbitMQ与Redis做队列比较

    本文仅针对RabbitMQ与Redis做队列应用时的情况进行对比 具体采用什么方式实现,还需要取决于系统的实际需求简要介绍RabbitMQRabbitMQ是实现AMQP(高级消息队列协议)的消息中间件 ...

  5. [原创]关于absolute、relative和float的一些思考

    absolute: 元素完全脱离文档流,不占文档流的位置,不使用top.left等属性时,仍然在原文档流位置上(但是不在文档流中,也不占用位置),设置了top.left等之后,向上寻找到第一个非sta ...

  6. Java程序发送邮件

    之前上网有看到过别人总结的使用java程序发送邮件,于是自己下来练习,把自己学习的一些心得总结出来. 首先我们这里需要采用两个jar包: 需要的朋友可以自行上网去CSDN类似的网站上面找 顺便把自己测 ...

  7. 在spring boot中使用自定义的properties

    1 在application.properties中添加 android.name=Tim android.password=123456 新建一个保存该Setting的配置类, @Configura ...

  8. zookeeper snowflake 实战

    目录 写在前面 1.1.1. 集群节点的命名服务 1.1.2. snowflake 的ID算法改造 SnowFlake算法的优点: SnowFlake算法的缺点: 写在最后 疯狂创客圈 亿级流量 高并 ...

  9. TensorFlow_action

    安装TensorFlow  包依赖 C:\Users\sas> pip3 install --upgrade tensorflow Collecting tensorflow Downloadi ...

  10. 【python】-- 深浅copy、集合

    深浅copy 1.数字.字符串的copy: 赋值(=).浅拷贝(copy)和深拷贝(deepcopy)其实都一样,因为它们永远指向同一个内存地址: >>> import copy & ...