C#调用操作Excel的一个类

c#调用EXCEL宏及操作类 c#调用EXCEL宏及操作类 c#调用EXCEL宏及操作类 c#调用EXCEL宏及操作类 立即下载

在这儿本来想写长一点的文章,但因为时间的关系,没有写成。现把自己做的一个小东西,C#调用Excel作报表的源代码放在这儿给大家看看。关于代码的构成,在源代码中已经有完整的代码注释了,这儿就不说什么了。

下面的这个类中,主要完成的功能是从数据库中逐字段读出数据,设置格式后,在Excel中显示出来。这是它运行后的效果图:

在这个类中,有两个参数传进来,一个是它的数据源,另一个是整个报表的标题字符串,具体看代码就应该知道了。

using System;
using System.Data;
using Excel;

namespace LogicLayer
{
?///


?/// OutputExcel 的摘要说明
?///

?public class OutputExcel
?{
??public OutputExcel(DataView dv,string str)
??{
???//
???// TODO: 在此处添加构造函数逻辑
???//
???Excel.Application excel;
???int rowIndex=4;
???int colIndex=1;

???Excel._Workbook xBk;
???Excel._Worksheet xSt;

???excel= new Excel.ApplicationClass();;
???xBk = excel.Workbooks.Add(true);
???xSt = (Excel._Worksheet)xBk.ActiveSheet;

???//
???//取得标题
???//
???foreach(DataColumn col in dv.Table.Columns)
???{
????colIndex++;
????excel.Cells[4,colIndex] = col.ColumnName;
????xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
???}

???//
???//取得表格中的数据
???//
???foreach(DataRowView row in dv)
???{
????rowIndex ++;
????colIndex = 1;
????foreach(DataColumn col in dv.Table.Columns)
????{
?????colIndex ++;
?????if(col.DataType == System.Type.GetType("System.DateTime"))
?????{
??????excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
??????xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
?????}
?????else
?????if(col.DataType == System.Type.GetType("System.String"))
?????{
??????excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
??????xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
?????}
?????else
?????{
??????excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
?????}
????}
???}
???//
???//加载一个合计行
???//
???int rowSum = rowIndex + 1;
???int colSum = 2;
???excel.Cells[rowSum,2] = "合计";
???xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
???//
???//设置选中的部分的颜色
???//
???xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
???xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
???//
???//取得整个报表的标题
???//
???excel.Cells[2,2] = str;
???//
???//设置整个报表的标题格式
???//
???xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
???xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;
???//
???//设置报表表格为最适应宽度
???//
???xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
???xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
???//
???//设置整个报表的标题为跨列居中
???//
???xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
???xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenterAcrossSelection;
???//
???//绘制边框
???//
???xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
???xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight = Excel.XlBorderWeight.xlThick;//设置左边线加粗
???xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight = Excel.XlBorderWeight.xlThick;//设置上边线加粗
???xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeRight].Weight = Excel.XlBorderWeight.xlThick;//设置右边线加粗
???xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlThick;//设置下边线加粗
???//
???//显示效果
???//
???excel.Visible=true;
??}
?}
}
有人在问,如何结束Excel进程?
可以强制结束进程:)
一般采用垃圾自动回收的技术,但为了更彻底地结束Excel进程。我们可以再加上一个事件:判断Excel是否还在进程集里面。如果有的话,返回true;当然,如果没有的话,返回false。
当事件为真的时候,采用强制进程杀死技术就行了。
如果要判断Excel是否在进程集里面,可以参考下面的代码:
??????????? int ProceedingCount = 0;
??????????? Process[] ProceddingCon = Process.GetProcesses();
??????????? foreach(Process IsProcedding in ProceddingCon)
??????????? {
??????????????? if(IsProcedding.ProcessName == "Excel")
??????????????? {
??????????????????? ProceedingCount += 1;
??????????????? }
??????????? }
??????????? if(ProceedingCount > 0)
??????????? {
??????????????? MessageBox.Show("该系统中已经在运行Excel了。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return true;
??????????? }
else
{
return false;
}
??}
==================
要杀死进程的话,用一个叫什么Kill()的事件吧。好象是这样的。:)

【Linux】实际项目应该如何完成?--安防监控系统项目的总结 到目前为止我也做个5、6个嵌入式项目,但以往都是从零开始自己做,也就是毫无计划,想到那里做那里,有想法就会去实现,就这样导致我碰到了很多坑,也消耗了我许多时间,当然,不是说这样不好,因为在其中我也得到了一个很好的锻炼与练习,但是这不适用于在工作中去这样做。... 阅读详情

相关推荐

一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用

一.硬件组成 软件组成:施耐德SoMachineV4.3二.○1.打开SoMachineV4.3,点击“新建项目”○2.点击“空白项目”○3.项目命名○4.点击“创建项目” 三. 点击“Logic Builder” 四. ○1.右击项目”PMM_CANOPEN_ST”添加设备○2.点击”LogicController”选择PLC型号TM241CEC24T/U○3.点击“添加设备” 五. ○1.右击CAN_1,添加设备○2.选择“CANopen Perfomance”○3.点击“添加设备”

m0_46512607的博客 2520

C#编程学习27: C#操作Excel从入门到精通

C#操作EXCEL的基本操作和海量数据导出优秀代码集锦

m1m2m3mmm的博客 3万+

nRF52840 低功耗蓝牙开发指南:从硬件架构到物联网应用实战

本文深入解析nRF52840低功耗蓝牙芯片的硬件架构与开发实践,涵盖从开发环境搭建到BLE协议栈开发的详细指南。通过实战案例分享低功耗优化技巧,帮助开发者高效实现物联网应用,特别适合智能家居和工业场景。

d3e4f的博客 417

[原创]C# 操作Excel的类

最近领导要求把一些数导入Excel生成报表, 工作本来是要手动完成的,但咱是做程序的, 应该想一切办法让程序来代替我们完成任务, 于是写了一个操作Excel的程序, 现将代码公布, 希望对读本文的朋友有所帮助 http://xingfustar.cnblogs.com 代码写的不好,请多原谅, 目的与大家多交流学习,有什么问题,欢迎指出. http://xingfust...

Liumei_1122的博客 174

UVM自学笔记3——项目之三——从零开始搭建ahb_sramc验证平台

创建如下所示的目录结构: 2.在tb的文件下:顶层的testbench如下:在tb中,第24行的代码将uvm宏相关的内容include进来,第26行的代码把uvm_pkg包导入进来,然后将agent相关的包(ahb_pkg/sram_pkg),testcase相关的包(uvm_ahb_sram_test_pkg)以及env相关的包(uvm_ahb_sram_env_pkg)都导入进来,在第38行和39行将接口以virtual interface的形式配置给ahb_agent和sramc_agent下

ZhangShuHuai11的博客 9476

致远OA公文管理模块相关操作

致远oa协同办公系统 公文管理模板 相关操作

weixin_59666050的博客 4274

excel在系统中集成调用的方法,C#

网上比较多讲述如何操作excel表的文章,但都是启动excel的窗口来打开excel数据文件。有时候需要把excel表嵌入到自己程序的form中,给客户一个不用切换窗口的操作界面,似乎更好。这在vc中用ole技术很容易实现,但是在c#中方法就不一样啦。下面将就此进行阐述。一、首先简要回顾一下如何操作excel表  先要添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Micro

上帝狼 1053

Spark Graphx 项目实战(航班飞行网图分析)

航班飞行网图分析一.需要的技能点二.任务描述三.数据探索1.下载数据2.数据格式四.航班飞行网图问题分析1.构建航班飞行网图2.统计航班飞行网图中机场与航线的数量3.计算最长的飞行航线4.找出最繁忙的机场5.找出最重要的飞行航线6.找出最便宜的飞行航线五.代码实现 一.需要的技能点 Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel 二.任务描述 需求概述: 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任

May_J_Oldhu的博客 1538

Visual C# 编程操作Excel

 Visual C# 编程操作Excel2004-08-20 作者:邵回祖 出处: ahcithttp://www.yesky.com/SoftChannel/72342380468109312/20040819/1844435.shtml摘要:本文介绍了Excel对象、C#中的受管代码和非受管代码,并介绍了COM组件在.NET环境中的使用。  关键词:受管代码;非受管代码;Excel对象

4495

雪莉果的Axure原型工厂vol.006 中继器应用(二)——多选穿梭框

如果你用axure有一段时间了,那么你很快就能琢磨出一个大体设计流程,比如加一个中间过度的元件,来储存需要穿梭的内容;但是如果你再想一想,就会发现,这样做,似乎只能解决单选,那么多选需要怎么操作呢? 这时候,中继器就会告诉你,我还能做的更多。

weixin_43829792的博客 976

别再手动算电阻了!手把手教你从ITF/IRCX文件自动生成EMX工艺文件(附脚本思路)

本文详细介绍了如何从ITF/IRCX文件自动生成EMX工艺文件,提升芯片设计效率。通过解析厚度变化多项式和电阻率查表,实现工艺文件的高效转换,避免手动处理带来的错误。文章还提供了脚本思路和验证方法,确保数据精确度,特别适用于电感仿真等关键环节。

didui8202的博客 454

C#调用操作Excel的一个类 (转)

C#调用操作Excel的一个类 (转)[@more@]在这儿本来想写长一点的文章,但因为时间的关系,没有写成。现把自己做的一个小东西,C#调用excel作报表的源代码放在这儿给大家看看。关于代码的构成,在源代码中已经有完整的代码...

csd3176的博客 114

第4章-07-将WebDriver获取的Cookie传递给Requests

在使用Selenium WebDriver获取了浏览器的Cookies之后,你可以将这些Cookies传递给requests库,以便在后续的HTTP请求中使用这些Cookies。这样做可以让你模拟浏览器会话,使得请求看起来像是从之前使用Selenium WebDriver控制的浏览器发出的。

黑夜开发者的博客 692

如何操作Excel模板,往Excel模板中写入数据

引言            Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。它

jianyi7659的专栏 7706

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

联为C#4——ini文件、excel操作

ini文件 写入数据: 在初始化中读入数据: 将功能封装成一个类: 用类的方式对ini文件进行读写: excel操作 创建工作簿 在引用中添加office16 创建对象: 每次操作完都会有excel的进程残留,要关闭进程,杀死进程。 添加工作表 用封装好的类对excel进行操作 ...

qq_42832272的博客 691

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

c#调用excel中的vba宏

帮助类仅提供了一个方法:RunExcelMacro 参数说明:         string         excelFilePath  Excel文件路径                 string         macroName    宏名称         object[]     parameters     宏参数组         out object  rtnV

酒剑仙的技术心得 1851

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C# winform Excel导入保存数据两种方法

方法一:;微软自带excel 操作类 项目运行:设置 Any CPU 引用:System.Data.OleDb 点击事件导入按钮: private void buttonX25_Click(object sender, EventArgs e) { //打开一个文件选择框 OpenFileDialog ofd = new OpenFileDialog(); ...

心若静,风奈何 9649

Excel操作類

Excel操作類,關閉了綫程,後臺操作打開。可以創建和打開Excel

xiaolan458的专栏 197

C# WinForm【笔记5】导入Excel到DataGridView

点击按钮导入Excel至表格,按钮事件代码。

weixin_54551358的博客 311

JAVA Excel com组件_基于COM组件方式读取Excel文件内容(C#版)

新建Win32 Console Application (C#),添加COM引用Microsoft Office Excel 15.0 Object Library (Office 2013对应版本15.0)完整示例代码如下using System;using Microsoft.Office; // Add new referencenamespace ExcelReader{class Pro...

weixin_42467533的博客 117
上一篇: C#调用控制面板选项
下一篇: 通过Excel自带的查询分析器快速完成从SQL Server中导出数据的例子(通用类)
甴曱
博客等级 码龄24年 184粉丝 29原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值