C# 操作Excel之旁门左道 [ C# | Excel ]
前言
C#使用自带的库(Excel 11.0/5.0 Object Library)操作Excel一直以来都有些问题,最严重的要数有时候Excel进程结束不掉这个问题,操作起来也不是很方便。其实Excel用得稍熟点的朋友就知道Excel可以导出为html格式的文件,我想说到这里大家应该大致明白本文的意图了,下面我为大家做一个范例。
环境
1. Microsoft Office Excel 2003
正文
一、目的
从数据库导出数据到Excel中并锁定部分数据不让修改。这里以学生成绩表为例, 学生编号、学生姓名、学生成绩 三个字段从数据库提取,并锁定,老师评价栏在导出后可输入。
二、实现
1. 制作Excel"模板"
注意这里的模板不是指excel里面的模板,主要为后面导出成html做准备。
1.1 新建Excel,名称为学生成绩表.xls 。
1.2 设置列名栏目,设置格式字体等信息,最终形式的格式,如图:
冻结窗口的方法:比如要冻结第一行,选择第二行的第一个单元格,工具栏- 窗口- 冻结窗口。
1.3 锁定区域
1.3.1 Excel全选- 右键 设置单元格格式- 保护- 去掉 锁定 前复选框
1.3.2 选择学生编号、学生姓名、学生成绩这三列,同上(1.3.1)步骤相反,即勾上 锁定 前的复选框。
1.3.3 输入测试数据 1 张三 83。
1.3.4 工具- 保护- 保护工作表,模板完成!如果你在锁定后再更改前面三列,将出现如下警告框:
2. 导出Excel为html格式并复制到一个空白的aspx页面中
2.1 工具栏 文件- 另存为网页,导出后的文件为学生成绩表.htm。
2.2 用记事本或UE打开,可以看到如下部分代码:
![复制代码](http://common.cnblogs.com/images/copycode.gif)
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40"
head
meta http-equiv=Content-Type content="text/html; charset=gb2312"
meta name=ProgId content=Excel.Sheet
meta name=Generator content="Microsoft Excel 11"
link rel=File-List href="学生成绩表.files/filelist.xml"
link rel=Edit-Time-Data href="学生成绩表.files/editdata.mso"
link rel=OLE-Object-Data href="学生成绩表.files/oledata.mso"
!--[if gte mso 9] xml
o:DocumentProperties
o:Created 1996-12-17T01:32:42Z /o:Created
o:LastSaved 2009-05-25T06:35:53Z /o:LastSaved
![](http://www.cnblogs.com/Images/dot.gif)
![](http://www.cnblogs.com/Images/dot.gif)
![复制代码](http://common.cnblogs.com/images/copycode.gif)
2.3 新建aspx页面: Export.aspx。
2.4 去掉Export.aspx中除 %@ Page 的代码,复制htm里面的代码到空白的Export.aspx中,添加 form id="form1" runat="server" 。
3. 调取数据并显示
3.1 找到测试数据部分的html代码替换为asp:Repeater控件代码,如下
![复制代码](http://common.cnblogs.com/images/copycode.gif)
tr height=19
td height=19 > td > td > td > /tr
--
asp:Repeater ID="rptData" runat="server"
HeaderTemplate
/HeaderTemplate
ItemTemplate
tr height=19
td height=19 > %#Eval("id")%
/td
td > %#Eval("name")%
/td
td > %#Eval("achievement")%
/td
td > /tr
/ItemTemplate
FooterTemplate
/FooterTemplate
/asp:Repeater
![复制代码](http://common.cnblogs.com/images/copycode.gif)
3.2 后台调取数据,导成excel并下载
这里就不连接数据库了,直接在程序里面模拟一些数据。
![复制代码](http://common.cnblogs.com/images/copycode.gif)
{
this.EnableViewState = false;
//加载数据
LoadData();
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("学生成绩表.xls", System.Text.Encoding.UTF8));
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
//Response.End();
}
private void LoadData()
{
IList User users = new List User ();
//测试数据
users.Add(new User(1, "刘一", 81));
users.Add(new User(2, "陈二", 82));
users.Add(new User(3, "张三", 83));
users.Add(new User(4, "李四", 84));
users.Add(new User(5, "王五", 85));
users.Add(new User(6, "赵六", 86));
users.Add(new User(7, "孙七", 87));
users.Add(new User(8, "周八", 88));
users.Add(new User(9, "吴九", 89));
users.Add(new User(10, "郑十", 80));
rptData.DataSource = users;
rptData.DataBind();
}
[Serializable]
private class User
{
public User()
{
}
public User(int id, string name, decimal achievement)
{
this._id = id;
this._name = name;
this._achievement = achievement;
}
private int _id;
/// summary
/// 编号
/// /summary
public int id
{
get { return _id; }
set { _id = value; }
}
private string _name;
/// summary
/// 姓名
/// /summary
public string name
{
get { return _name; }
set { _name = value; }
}
private decimal _achievement;
/// summary
/// 成绩
/// /summary
public decimal achievement
{
get { return _achievement; }
set { _achievement = value; }
}
}
![复制代码](http://common.cnblogs.com/images/copycode.gif)
代码说明:
Page_Load中依次加载数据,然后以ms-excel类型讲web浏览变成excel文件下载。
3.3 导出后的excel截图
3.3.1 下载
3.3.2 修改锁定的三列截图
很明显,动态输出表格是我们擅长的,也不用你去翻N多N多的API了,最重要的是这里没有Excel进程!
三、下载
1. 源代码2009-5-25
四、注意
1. 下载回来的excel如果直接在上面操作的话可能产生 [excel名称].files 文件夹。
结束
解决一个问题尽量多想多了解多找一些方案和方法,比较各个方案的优缺点,再选一种适合自己实际情况的来实现。
转载:http://www.cnblogs.com/over140/archive/2009/05/25/1488913.html
怎样才算精通 Excel? 为了帮助更多人快速掌握职场必备技能Excel,我写了一个免费的教程《职场Excel》,能帮助你解决99%职场中遇到的问题
相关文章
- Excel与XML相互转换 – C# 简单实现方案[通俗易懂]
- mysql导入excel文件_将Excel数据导入MySQL「建议收藏」
- C#基础学习之——(一)Dock与Anchor
- c# 多线程并发-金三银四面试:C#.NET面试题高级篇2-多线程
- C# 读取EXCEL文件的三种经典方法详解编程语言
- 如何使用Excel连接MySQL数据库(excel连接mysql数据库)
- 使用Excel快速读取MySQL数据(excel读取mysql)
- 步骤简单!轻松实现SQL Server导入Excel操作(sqlserver导入excel)
- 轻松导出:用SQL Server批量将数据导出到Excel(sqlserver导出excel)
- Oracle将数据输出到Excel中(oracle写excel)
- C#生转换网页为pdf
- ASP.NET(C#)读取Excel的文件内容
- c#中虚函数的相关使用方法
- c#中GetType()与Typeof()的区别
- 解析c#操作excel后关闭excel.exe的方法
- C#中静态的深入理解
- C#探秘系列(四)——GetHashCode,ExpandoObject
- C#把数字转换成大写金额的代码实例
- 一则C#简洁瀑布流代码
- C#解析Excel并且生成Csv文件代码分析
- C#利用XML创建Excel文档的实现方法
- C#使用RenderControl将GridView控件导出到EXCEL的方法