C#导出数据至excel模板

时间:2023-02-16 00:11:32

开源分享
最近一个客户要做一个将数据直接输出到指定格式的Excel模板中,略施小计,搞定

其中包含了对Excel的增行和删行,打印预览,表头,表体,表尾的控制

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using System.IO;
using System.Windows.Forms; namespace UFIDA.U8.UAP.QW.Common
{
/// <summary>
/// Excel操作管理
/// </summary>
public class ExcelHandler
{ #region 按模板导出
/// <summary>
/// 导出至模板
/// </summary>
/// <param name="type">类型{市场费:0,代理费:1}</param>
/// <param name="dt">数据源</param>
/// <returns>失败信息errorMsg</returns>
public string ExportModel(int type, DataTable dt)
{
//选择保存路径
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return "";
string errorMsg = string.Empty;
string fileName = type == ? "代理费打印模板" : "市场费打印模板";
string path = Path.GetFullPath(@"Temp\" + fileName + ".xlsx");
string savaPath = fbd.SelectedPath;
savaPath=savaPath.EndsWith("\\")?savaPath:savaPath+"\\";
savaPath += fileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
//需要添加 Microsoft.Office.Interop.Excel引用
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
try
{
app.Visible = false;
app.UserControl = true;
Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(path); //加载模板
Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(); //第一个工作薄。
if (worksheet == null)
{
errorMsg = "工作薄中没有工作表";
return errorMsg;
}
int rowIndex = ;
//写入数据,Excel索引从1开始。
//foreach (DataRow row in dt.Rows)
//{
if (rowIndex ==)
{
#region head
worksheet.Cells[, ] = "客户编码1";//row["产品名称"].ToStr();
worksheet.Cells[, ] = "客户名称1";//row["产品名称"].ToStr(); #endregion #region bottom #endregion
} #region body
worksheet.Cells[rowIndex, ] = "产品名称1";//row["产品名称"].ToStr();
worksheet.Cells[rowIndex, ] = "规格型号1";//row["规格型号"].ToStr();
worksheet.Cells[rowIndex, ] = 1001.0000;//row["结算数量"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1002.0000;//row["销售单价"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1003.0000;//row["销售金额"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1004.0000;//row["结算单价"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1005.0000;//row["差价"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1006.0000;//row["应付费用"].ToStr().ToDouble();
#endregion rowIndex++;
InsertRows(worksheet, rowIndex); //} //调整Excel的样式。
//Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[dt.Rows.Count + 2, 8]);
//rg.Borders.LineStyle = 1; //单元格加边框。
worksheet.Columns.AutoFit(); //自动调整列宽。
//Missing 在System.Reflection命名空间下。
workbook.SaveAs(savaPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//workbook.PrintPreview(true);//打印预览,前提是app.Visible = true,否则看不到;
}
catch (Exception ex)
{
errorMsg += ex.Message;
}
finally
{
//最后一定要退出
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
GC.Collect();
}
return errorMsg;
}
/// <summary>
/// 在工作表中插入行,并调整其他行以留出空间
/// </summary>
/// <param name="sheet">工作簿</param>
/// <param name="rowIndex">行索引</param>
private void InsertRows(Microsoft.Office.Interop.Excel._Worksheet sheet, int rowIndex)
{
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)sheet.Rows[rowIndex, missing];
//object Range.Insert(object shift, object copyorigin);
//shift: Variant类型,可选。指定单元格的调整方式。可以为下列 XlInsertShiftDirection 常量之一:
//xlShiftToRight 或 xlShiftDown。如果省略该参数,Microsoft Excel 将根据区域形状确定调整方式。
range.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, missing);
} /// <summary>
/// 在工作表中删除行
/// </summary>
/// <param name="sheet">工作簿</param>
/// <param name="rowIndex">行索引</param>
private void DeleteRows(Microsoft.Office.Interop.Excel.Worksheet sheet, int rowIndex)
{
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)sheet.Rows[rowIndex, missing];
range.Delete(Microsoft.Office.Interop.Excel.XlDeleteShiftDirection.xlShiftUp);
} #endregion
}
}

C#导出数据至excel模板的更多相关文章

  1. 一个很好的用C&num;导出数据到Excel模板的方法

    /// <summary> /// 导数据到Excel模板 /// </summary> /// <param name="tab">要输出内容 ...

  2. c&num; 导出数据到Excel模板

    最近在做一个发邮件的功能,客户要求需要导出一个Excel附件,并给了附件的格式, eg: Last Name 姓 First Name 名 Chinese Characters汉字书写(仅大陆人填写) ...

  3. C&num; 导出数据到Excel模板中(转)

    今天做报表的时候遇到了多表头的问题,而且相应的报表的格式都一样.所以就采用了报表模板的方式来进行. 第一步:在开发的当前项目中引入:Microsoft.Office.Interop.Excel:Sys ...

  4. C&num;导出数据的EXCEL模板设计

    一:将如下图中,查询出来的数据导出到EXCEL中 二:Excel的状态 三:设计的背后工作 四:最后一步,隐藏

  5. (原创)将Datatable数据按照Excel模板格式导出

    最近遇到一个问题,就是导出数据的时候需要自定义的表头,如图 如果自己用代码写表头的话,可能会有点复杂,而且代码量很多,所以我就想了一个办法,直接在Excel里面把表头定义好,然后把数据写入Excel模 ...

  6. 使用Open xml 操作Excel系列之二--从data table导出数据到Excel

    由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...

  7. Python导出数据到Excel表格-NotImplementedError&colon; formatting&lowbar;info&equals;True not yet implemented

    在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...

  8. 手把手教你springboot中导出数据到excel中

    手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...

  9. 1&period;ASP&period;NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...

随机推荐

  1. Mysql基础(二)

    学习路线:数据约束-> 数据库的设计过程-> 存储过程的相关知识-> 触发器-> 权限管理 (一)数据约束 1.1.默认值的设置 创建员工表emp 将默认地址设置为'中国'my ...

  2. vert&period;x学习(三),Web开发之Thymeleaf模板的使用

    在vert.x中使用Thymeleaf模板,需要引入vertx-web-templ-thymeleaf依赖.pom.xml文件如下 <?xml version="1.0" e ...

  3. CentOS7安装Nginx并部署

    服务器IP是192.168.36.136 1.直接yum install nginx即可 2.主配置文件是/etc/nginx/下的nginx.conf,另外一个是/etc/nginx/conf.d/ ...

  4. eclipse插件安装失败的列表如何清除-一个困扰很久的问题

    平时在安装eclipse插件的时候由于网络不稳定或者下载下来的包不兼容等原因安装失败的情况很多, 但是当插件安装一次以后,就会在安装的url中留下历史记录,并且每次切换到安装插件的界面中时,后台都要检 ...

  5. BZOJ 3875&colon; &lbrack;Ahoi2014&rsqb;骑士游戏 dp&plus;spfa

    题目链接: 题目 3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MB 问题描述 [故事背景] 长期的宅男生活中,JYY又挖掘出了一 ...

  6. tcp&lowbar;wrapper

    介绍 对基于tcp协议开发并提供服务的应用程序,所提供的一层访问控制工具 基于库调用实现其功能 * 库名:libwrap 判断服务是否能够由tcp_wrapper进行访问控制 1. 动态编译 ldd命 ...

  7. 项目Alpha冲刺Day2

    一.会议照片 二.项目进展 1.今日安排 初步搭建后台框架,根据昨天的最终设计再修改原型,成功使用powerDesigner导出sql. 2.问题困难 使用了比较多的框架,而且是首次尝试纯java配置 ...

  8. PowerApp Document

    https://docs.microsoft.com/en-us/powerapps/ PowerApp Document: https://docs.microsoft.com/en-us/powe ...

  9. 如何获取微信小店小程序的AppID

    2017年11月16日,微信有一个重磅的宣布:为了帮商家在微信内快速开店,方便商家和用户之间沟通,所有认证公众号,可快速创建微信小店小程序.这个改变是否能给微信小店带来新的生机?还需要时间的考验.微信 ...

  10. python 模块之-configparser

    python 模块configparser   配置文件模块 import configparser    config = configparser.ConfigParser() config[&q ...