一、目的

    从数据库导出数据到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打开,可以看到如下部分代码:

<html xmlns:o="urn:schemas-microsoft-com:office:office"
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>

        2.3  新建aspx页面:  Export.aspx。

        2.4  去掉Export.aspx中除<%@ Page 的代码,复制htm里面的代码到空白的Export.aspx中,添加<form id="form1" runat="server">。

    3.  调取数据并显示

      3.1  找到测试数据部分的html代码替换为asp:Repeater控件代码,如下

 <!--
 <tr height=19 style='height:14.25pt'>
  <td height=19 class=xl27 style='height:14.25pt' x:num>1</td>
  <td class=xl27>张三</td>
  <td class=xl27 x:num>83</td>
  <td class=xl25></td>
 </tr>
 -->
 <asp:Repeater ID="rptData" runat="server">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
        <tr height=19 style='height:14.25pt'>
            <td height=19 class=xl27 style='height:14.25pt' x:num>
                <%#Eval("id")%>
            </td>
            <td class=xl27>
                <%#Eval("name")%>
            </td>
            <td class=xl27 x:num>
                <%#Eval("achievement")%>
            </td>
            <td class=xl25></td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:Repeater>

      3.2  后台调取数据,导成excel并下载

        这里就不连接数据库了,直接在程序里面模拟一些数据。

    protected void Page_Load(object sender, EventArgs e)
    {
        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; }
        }
    }

      代码说明:

        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 文件夹。

本文转自博客园农民伯伯的博客,原文链接:C# 操作Excel之旁门左道 [ C# | Excel ],如需转载请自行联系原博主。

C# 操作Excel之旁门左道 [ C# | Excel ]相关推荐

  1. python对excel操作简书_Python读写Excel表格,就是这么简单粗暴又好用

    最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理. 但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书 ...

  2. C#操作Excel(1)Excel对象模型

    Excel对象模型  (.Net Perspective) 本文主要针对在Visual Studio中使用C# 开发关于Excel的应用程序 本文的PDF下载地址:C#操作Excel2007.pdf ...

  3. python应用系列教程——python操作office办公软件(excel)

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python操作office办公软件(excel).本文对涉及xls文件读写上不方便.如果你需要通过python读写xls文件,可以参考htt ...

  4. pandas操作excel,matplotlib.pyplot画图插入到excel,处理复杂excel简单练习

    在数据分析上,一直都在公司zeppelin上敲python/scala代码,进行数据分析,公司内搞了个小考试,操作excel,弄matplotlib画图之类的: 好久没弄过这些了,在小技术上感觉被打脸 ...

  5. 高级操作!用 Python 在 Excel 里画出蒙娜丽莎

    之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳. 对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! mona-l ...

  6. python存储数据的操作(csv格式文件,Excel表格文件)!!!

    python存储数据 存储数据的方式 两种存储数据方式的区别 csv格式文件 Excel格式文件 csv文件的写入 csv文件的读取 Excel基本概念 Excel文件的写入 Excel文件的读取 存 ...

  7. 【Apache POI】Excel操作(一):Excel本地写入基本操作的实现

    有人住高楼,有人在深沟,有人光万丈,有人一身锈:世人千万种,浮云莫去求,斯人若彩虹,遇上方知有. 有目录,不迷路 前言 前期准备 POI基本介绍 Excel简单介绍 Excel版本介绍 Excel基本 ...

  8. 计算机高级筛选怎么操作,教您怎么用Excel高级筛选

    小可爱们,听说你们之中有人不知道怎么使用Excel,是吗?不要问小编是怎么知道的,因为这全靠小编的掐指一算.你们今天既然来到这儿,我就不会让你们空手而归的,来,把你们的目光往下挪,因为接下来小编我就要 ...

  9. 【Apache POI】Excel操作(六):Excel计算公式的读取和使用

    此后如竟没有炬火,我便是唯一的光. 文章目录 前言 Excel准备 计算公式读取 直接读取 屠龙秘技 再直接读取 再通过计算公式读取 完整代码 往期回顾 前言 在上期:[Apache POI]Exce ...

最新文章

  1. C语言13567星号如何输出,c语言程序编程心得
  2. 初等数论--同余--MILLER-RABIN素性检测算法
  3. php月历,PHP生成月历代码
  4. 给定一个整数序列,求中位数
  5. Maven使用注解配置SQL映射器(@Results,@ResultMap)
  6. 三网融合:不给安全营造“盗梦空间”
  7. vue导入txt文本
  8. 什么是PHP,如何快速运行PHP文件
  9. android textview setellipsize,android中给TextView设置属性ellipsize
  10. Apache Spark源码剖析
  11. 互联网晚报 |10/13 | 腾讯地图PC端将停止服务;国际货币基金组织下调全球经济增长预期至2.7%;保时捷菜刀售价1700元...
  12. 位运算4 起床困难综合症
  13. .Net框架搭建之辅助模版代码生成工具
  14. Windows10卸载密钥导致win10未激活--解决
  15. Python 四舍六入五成双
  16. 两端分散对齐怎么设置_Word文档两端对齐.分散对齐如何设置
  17. 定义视频尺寸html,使HTML5视频海报与视频本身尺寸相同
  18. java的聚合_java中聚合是什么
  19. 2345浏览器写CSDN博客错误
  20. 面试薪资谈好1万,邮件却写着“底薪3000+绩效7000”,合理吗?

热门文章

  1. 全排列:不含重复元素和含重复元素的全排列
  2. android 启动app过程,Android P APP冷启动过程全解析(之四)
  3. 型人格 disc测试_什么是压抑型人格,如何测试筛查压抑型人格?
  4. RabbitMQ的集群模式
  5. spring boot读取yml配置集合,反射实战!
  6. Spring Security原理之springSecurityFilterChain
  7. iOS中几种数据持久化方案总结
  8. python实现文件搜索_python实现搜索指定目录下文件及文件内搜索指定关键词的方法...
  9. CMake实战之安装测试和添加环境生成安装包
  10. Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture