C# 实现Excel导出 加载模板 导入数据到模板

Qt下Excel报表生成的又一利器----QtXlsxWriter 项目主页: http://qtxlsx.debao.me/ 阅读详情

前些天公司做了个项目,遇到要导出数据到Excel,并要求有格式,不用客户在去排版。本来用水晶报表之类的插件,做这个比较好,公司不愿掏钱,只好自己写程序去实现。 关于格式的控制有两种方案:一、填充数据时或田中完数据后在程序中控制格式;二、写好模板,格式固定好,只往里填数据就好了。对于第一种方案,在我前一篇日志里有介绍,下面介绍一下第二种方案。

 

using Excel;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Configuration;
public partial class UcTaskList : Tobto.DJ.DJWebUI.UIClass.DJUcListPageBase
{
    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
    private ResultPacket ToExcel()
    {
        ResultPacket rp = new ResultPacket();
        string excelTemplateDPath;



//EXCEL模板默认服务器物理存放路径
string tempEFilePath = "  //TempFiles";
//EXCEL临时文件保存服务器物理存放路径 
string tempEFileXPath = "/TempFiles";
//EXCEL临时文件保存服务器虚拟存放路径 
Excel.Application app = null;
//EXCEL对象
        Workbooks workbooks;
//工作簿集合
        _Workbook workbook;
//当前工作簿
        Sheets sheets;
//SHEET页集合
        _Worksheet worksheet; 
//当前SHEET页 #region 读取配置文件中路线模板路径及名称并验证是否存在 
//获取配置文件中路线模板路径及名称
        excelTemplateDPath = Server.MapPath(ConfigurationManager.AppSettings["ExcelTemplateDPath"]);
tempEFileXPath = ConfigurationManager.AppSettings["ExcelTemplateDPath"] + tempEFileXPath; 
tempEFilePath = excelTemplateDPath + tempEFilePath; excelTemplateDPath += "//TaskTemplet.xls";
//验证EXCEL模板文件是否存在 if (!File.Exists(excelTemplateDPath)) { rp.IsError = true; rp.Message = "配置文件中指定的模板文件不存在"; return rp; } 
//验证EXCEL临时文件夹是否存在
 if (!File.Exists(tempEFilePath))
  { Directory.CreateDirectory(tempEFilePath); } 
  #endregion
        #region
   //从配置文件中取列名为填充数据做准备 ArrayList list = new ArrayList(); if (ConditionArr != null && ConditionArr.Count > 0) { list = TaskManageBrl.Find(ConditionArr[0], ConditionArr[1], ConditionArr[2], ConditionArr[3], bool.Parse(ConditionArr[4]), ConditionArr[5], ConditionArr[6], ConditionArr[7], 0, 10000, true, CurrentLoginUserInfo); } #endregion try { #region 启动excel进程并加载模板
 //启动EXCEL进程 
        app = new Excel.Application();
        if (app == null)
        {
            rp.IsError = true; rp.Message = "Excel进程启动出错,请确认是否引用EXCEL组件";
            return rp;
        }
        app.Visible = false; 
        app.UserControl = true;
        app.DisplayAlerts = false;
        //加载读取模板
        workbooks = app.Workbooks;
        workbook = workbooks.Add(excelTemplateDPath);
        sheets = workbook.Worksheets; worksheet = (_Worksheet)sheets.get_Item(1);
        #endregion
        #region
        //填充数据
        for (int i = 3; i < list.Count; i++)
        {
            worksheet.Cells[i, 1] = "Emon任务"; worksheet.Cells[i, 2] = "343"; 
            worksheet.Cells[i, 3] = "233";
        }
        #endregion
        #region 保存临时文件 worksheet.Columns.AutoFit(); 
 //设置自动列宽
        try { 
            string tempFileName = "TaskList" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; 
            tempEFilePath += "//" + tempFileName; tempEFileXPath += "/" + tempFileName;
            worksheet.SaveAs(tempEFilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value); 
            DeleteTempFiles(tempEFilePath); 
            //清除临时文件
        //} catch
        //    //(Exception ex)
        //{ 
        //    rp.IsError = true; 
        //    rp.Message = "EXCEL文件已填充完毕,但在保存时发生错误"; return rp; 
        //}
        //rp.Message = tempEFileXPath; return rp; 
        #endregion 
    } catch (Exception ex) { 
        rp.IsError = true; 
        rp.Message = ex.ToString();
        return rp;
    }
        finally
        { ExcelDispose(app); }
    }
/// /// 关闭Excel进程 /// /// /// /// 

}}
protected void ExcelDispose(_Application CurExcel)
{ 
    try 
    { 
        if (CurExcel != null)
        { 
            CurExcel.Workbooks.Close();
            CurExcel.Quit(); 
            #region 
            //强行杀死打开的Excel进程
            IntPtr excelIPtr = new IntPtr(CurExcel.Hwnd);
            //得到这个句柄,具体作用是得到这块内存入口 int proID
    }
}
#ednregion 
C#导出数据到Excel的几种方法 首先说明,以下几种方法都是将DataTable 中导出数据到Excel 。 1、需要加载固定的Excel模板的方式 第一步,添加简单的 SaveFileDialog,以便将文件保存到合适的位置。SaveFileDialog SaveDialog = new SaveFileDialog(); SaveDialog.Filter = "Excel 文件(* 阅读详情

相关推荐

c# 使用NPOI按模板导出excel

excel模板设置 私车公用单 申请信息 申请单号: $header.ORDER_NO 申请日期: $header.CREATE_TIME $auotheight 申请部门: $header.APPLY_DEPT 申请人: $header.APPLY_USER $auotheight 项目: ...

LU142857的专栏 3290

Qt中操作excel

最近有一个把检测结果导出到excel中的任务,由于对qt比较熟悉,所以打算使用qt来实现。查了一下,使用qt下自带的QAxObject类,实现还是比较简单的。 首先需要在pro文件中添加axcontainer QT += core gui axcontainer 然后添加包含文件 #include <QAxObject> 如下是代码的具体实现: void MainWin...

千人斩的博客 7457

c# 将list中的数据导出到excel

#region 导入模版 另存excel /// &amp;lt;summary&amp;gt; /// 生成附件(使用Microsoft.Office.Interop.Excel组件的方式) /// &amp;lt;/summary&amp;gt; /// &amp;lt;param name=&quot;DT&quot;&amp;gt;&amp;lt;/param&amp;gt;

delina0的博客 5450

python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图#coding=utf-8from openpyxl importload_workbookfrom openpyxl.chart import(AreaChart,Reference)importMySQLdbclassGaokaoExport(object):def __init__(self):...

weixin_39920403的博客 239

C#使用第三方控件ReoGrid实现将Excel嵌套在程序中,方便数据的导入,可以直接粘贴数据,加载Excel模板样式

1、引用dll 2、将生成的控件拖入到窗体中 3、加载Excel模板,含有主要代码,实现cellvaluechange功能,类似datagridview path = Util.Pub.DownloadFile("重庆模组成本模型.xlsx"); reoGridControl1.Load(path, unvell.ReoGrid.IO.FileFormat.Excel2007); reoGridControl1.Worksheets[0].Ce

tangliuqing的专栏 5827

C#实现数据高效率导入EXCEL(适用于导入到指定特定模板)

本来各种数据库导入EXCEL都提供有操作接口(有的是COM组件,还有可以利用自带工具等),但是当要把数据写入到一定格式的EXCEL,利用这些就很不方便了,而且非要利用,实现起来过程也有点麻烦,效率上也就打了折扣,如果用EXCEL组件逐个单元格写的话,效率更低,这个我已经在实际应用中体验到了,在没有性能方面的要求下,这样还能过得去的。下面就举例说明另外一中实现方法,实现思路来源于

7480

导入导出Excel之模板方法模式运用

一、概述 在日常的开发过程种,excel报表是常见的一个需求。 execel的操作,可以分为两种,一种是读,一种是写,其他的项目辅助性的操作都是具有共性的,我们就可以将读和写抽象出来,针对简单的Excel导入导出操作,做一个标准的实现。但是在实际的需求中,列的合并,行的合并也是常有的需求,我们可以针对这些特定的需求,快速实现复杂Execel的开发。 二、设计 针对上述的需求,我们采用...

qq_36669747的博客 1115

C#使用NPOI将List数据导出到Excel文档

NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。使用 NPOI 可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。这里

dnazhd的博客 3069

Qt:读取已有数据的Excel文档,并将数据显示在通过QTableWidget绘制的表格中,之后将显示的数据保存成excel格式进行输出(包括表头等内容)

读取已有数据的Excel文档,并将数据显示在通过QTableWidget绘制的表格中,之后将显示的数据保存成excel格式进行输出(包括表头等内容) UI展示及功能简介 读取 //于Mainwindow中,on_read_clicked属于Pushbotton摁键的槽函数 void MainWindow::on_read_clicked() { execel_read();//...

qq_41605114的博客 1万+

C#实现DataGrid数据导出到Excel教程

NET框架中,DataGrid控件是一个重要的用户界面元素,主要用于以表格形式显示数据集合。它不仅能够呈现数据,还允许用户对数据进行交互式操作,如排序、分页以及行的增删改查等。DataGrid控件广泛应用于数据密集型应用程序中,特别是在展示复杂数据结构时。

weixin_42284380的博客 1132

C#通用Excel模板导出类实战工具

在企业级应用开发中,数据的可视化呈现与报表导出是不可或缺的功能模块。Excel凭借其结构化布局、广泛兼容性及用户熟悉度,成为数据导出的首选格式。C# 借助 .NET 生态中的 EPPlus、NPOI 等库,可高效实现 Excel 文件的生成与样式控制。

weixin_29717341的博客 487

C#导出数据到Excel模板and如何画Excel模板并导出数据,导入excel数据

首先,导出数据到Excel模板有两种方式: 一、使用Microsoft.Office.Interop.Excel组件的方式 二、使用NPOI的方式 一、使用Microsoft.Office.Interop.Excel组件的方式 该方式需要引入Microsoft.Office.Interop.Excel;System.Reflection 实现代码: /// /// 生成附件(

weixin_40597041的博客 5808

c#导出、导入Excel表格数据方法封装

通用类数据导出excel方法,包含读取DataTable数据集进行导出到Excel文档中, * 获取DataTable数据集合插入Excel表格中的指定行和列,并进行单元格样式的控制以及大于指定的 * 【65535】行数则需要创建一个新的sheet,保存文件路径以及文件下载 1.引用 Dll/NPOI.dll 第一:导出Excel表格数据方法实例 DataTable dtSource = new DataTable(); //dtSource获取要导出的数据源即可。 #region 导出数据 /// /// 导出数据 /// protected void ToOrInExcel(object sender, EventArgs e) { if (dtSource != null && dtSource.Rows.Count > 0) { Utility.ToexcelTempte(dtSource, "测试标题[" + DateTime.Now.ToStr("yyyy-MM-dd") + "]"); } } #endregion 第二:读取excel表格数据,赋值给DataTable,对DataTable进行处理保存到数据库中即可 DataTable dtS = new DataTable(); string excelPath=""; //获取Excel文件路径 InteractiveExcel ite = new InteractiveExcel(excelPath); ite.OpenOrReadFirst(); dtS = ite.ReadDataTable();

C# 指定模板 并导出Excel

1同事一个导出excel的功能 /// /// 每个字段为一列按顺序导出 /// 可指定不需要导出的字段名称,可通过编写委托函数设置指定名称字段的导出格式 /// 失败:抛出异常 /// /// auto: tac /// created date: 2016/01/2

晴朗_Raymond 3939

c#绩效考核系统.zip

主要模块 基本的人员,部门,菜单,权限管理 价值观考核 积分申请 KPI考核 上述三项模块排名 设计需求排期 问卷调查 DISC测试 供应商模块 产品库模块 新品需求管理 财务报表分析导入导出模块 之前不能下载的版本已经修复

【汽车故障诊断2】从标准到实战:解码DTC格式背后的诊断逻辑

本文深入解析汽车诊断故障码(DTC)的格式与逻辑,对比了OBD-II标准(如ISO 15031-6)的5字符格式与UDS协议(ISO 14229-1)下更丰富的3字节格式。文章从国际标准出发,结合实战案例,阐述了DTC如何作为汽车电子系统的“体检报告”,帮助工程师和维修技师精准定位故障,并详细解读了UDS 19服务如何读取和管理DTC状态。

berry的博客 709

C# 根据模板 导出 Excel 图表 (NPOI组件)

C# 根据模板 导出  Excel  图表 (NPOI组件) 我的数据是放在List中的。     //导出         protected void onclickbutton(object sender, EventArgs e)         {             getlist();//取出数据,就不详细说明         }

qq_39168779的博客 8377

3D Slicer肺部CT病灶体积测量:阈值法实操全流程

在医学影像分析中,病灶体积的精准测量是肿瘤评估、疗效随访和科研统计的重要基础。传统逐层手动勾画不仅耗时,且主观差异大,而基于CT值的阈值分割技术,通过设定灰度区间自动提取目标体素,能够快速生成三维分割结果,具有高效、可重复、边界标准统一的优势,尤其适用于肺部实性结节这类与周围肺实质对比度高的病灶。理解体素与CT值的关系,掌握阈值范围的设定逻辑,并配合连通域分析、边缘修正等工程化操作,即可在3D Slicer中稳定获得可靠的体积数据。本文从技术原理出发,系统梳理了DICOM导入、窗宽窗位调节、阈值选择、三维重

weixin_29050271的博客 251

C# 将Datatable的数据导出至指定的excel模板案例

(2)导出功能,C#操作excel有很多方法,例如 Microsoft.Office.Interop.Excel 、Aspose.cells、NPOI等,我选的是引用 Microsoft.Office.Interop.Excel。首先说一下需求,用户需要将一个报表的数据导出到指定的excel模板,再将这个excel模板发给客户,客户填写信息后,用户再使用该界面进行导入反写。主要功能为查询、导出、导入与保存。(1)查询功能,这个就是从数据库中查询数据再显示到gridControl1上,就不贴代码了。

FFFAN_KIKI的博客 1745

DeepSeek-V3本地Docker容器化部署

通过以上步骤,你可以在本地上成功通过容器化部署DeepSeek-V3。安装完成后,启动Docker Desktop。如果需要后台运行,可以加上。

u013302168的博客 2123

在WinXP操作系统上安装Tornado2.2详细教程

使用VxWorks的人都想在自己的电脑中装VxWorks的编译器Tornado,然而Win10操作系统对于Tornado并不友好,根本装不成功。而对于Win7操作系统,之前在实验室一台Win7上装Tornado成功过,并且一直在上面进行vx开发,但是过一段时间在其他Win7上装Tornado时又不能成功,由此说明Tornado对于Win7操作系统对Tornado的兼容也不是很好,所以想要长久使用T...

weixin_43822311的博客 4480

C#的NPOI根据模板导出动态EXCEL图表,

对于数据导出网上数不胜数,可是图表却寥寥无几,可能我没搜到吧。。。。 这个方法感觉对于EXCEL模板的要求比较高,模板做的好导出来的效果相对完美一点,导出的数据若是动态行列的不妨看下如下这篇,先做好一份好的模板 https://www.zhihu.com/question/48727312/answer/113147034 顺便再放一个纵向折线图画法 http://www.off...

aizhong1542的博客 1043

BLDC控制实验:方波、霍尔、开环、定速、正转

本文记录博主学习BLDC控制软件的过程。 文章目录1 概述2 软件架构及工具链2.1 软件架构2.2 工具链3 底层代码生成3.1 时钟配置3.2 按键输入配置 1 概述 本文是博主第一次做BLDC控制实验,目的仅仅是写代码让BLDC转起来,而暂时不考虑其他复杂的需求。 控制的方法是比较简单的六步换相法。利用电机内部的霍尔传感器,通过参考电机厂家给出的二二导通换相表,生成方波来控制电机。第一次实验为了简化需求,只考虑开环、定速、正转的情况: 开环:不考虑速度反馈,直接给PWM让电机转起来; 定速:不考虑速

u013288925的博客 1万+
上一篇: C# 生成Excel图表
下一篇: C# Excel行高、列宽、合并单元格、单元格边框线、冻结
rubychen410
博客等级 码龄19年 32粉丝 95原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值