此篇随笔本人也将发到博客园首页,希望能留在首页,也只是希望。
此处只是记载本人书写的一篇随笔被移除首页对本人所产生的感想,不含任何对他人、第三方不满的心理,更不会存在心理攻击。先谈感想,后链接随笔。
不知道从何时起,本人喜欢写随笔,原意只是做一个不会丢失的笔记本,以便自己闲暇时间翻看学习使用。因为本人一直有浏览博客园首页的习惯,大概是一个月前吧,突然萌生了将自己写的随笔也发表在首页,然后就一发而不可收拾,接连将自己平时总结及笔记弄到博客园首页,看到原本自己写的随笔的阅读量只是几十,现在变成了几百,心中自豪之情油然而生。所以这之后每次写完随笔,发布到首页,时不时的就会去查看一下,有时阅读量增加一位数心中就非常窃喜,见笑了,有点土鳖了。
前几天发布了一篇关于WPF基础类型的随笔:http://www.cnblogs.com/ysyn/p/3408201.html
可以说一篇随笔,不管是质量好的还是差的,最起码也需要3个小时的书写。自己写完了,同样是发布到首页,但中午吃完饭后,再次查看时,博客园居然收到一个短消息,被告知随笔被移除首页,当时的心情可想而知。随后肯定是反省,反省随笔的质量,随笔书写的方式,等等。突然,心中一滞,我写随笔是为了什么?
我写随笔是为了什么?
刚开始写第一篇随笔时,目的是做一个不会丢失的笔记,以便自己学习。
后来,想到发布到首页,让更多初学者,新手能够看到自己用心整理的学习笔记。
再后来,看到阅读量在上升,感觉写随笔就是为了赚取阅读量。
再再后来,醒悟了,写随笔本质上是为了自己的提升。在自己提升的基础上,能方便新手、方便初学者那样更好了。
本文链接:http://www.cnblogs.com/ysyn/p/3414008.html,转载请注明。
本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其基本格式,如红头、抬头、文号等等格式的限制我们又该如何处理呢?
主要原理:
1、利用excel、word做好模板,在模板中设置关键字
2、在程序中调用模板,替换关键字
3、将替换后的模板作为导出文件输出
一、导出到EXCEL,在此处先从简单的入手,先描述如何利用excel做导出。步骤如下:
1、用excel2007随便创建一个excel文件,打开添加如下数据:
2、点击另存,将excel文件另存为xml格式文件,选择2003xml格式,如下图:
3、右键用记事本打开刚刚另存到xml文件,观察xml内容会发现其妙之处,如下图:
如上图所示,注意观察,每一个WorkSheet都用了一段xml代码来表示,方框部分为我们写入的数据,圆圈部分为我们要处理的重要部分。
小圆圈内的2表示当前数据2行,大圆圈表示我们看到的三行三列数据,因此我们要做的就是将我们要导出到数据写成圆圈中的格式就行了。
4、改进xml文件,创建关键字,如下图:
如上图所示,我们创建了两个关键字,具体含义不多说。
最后将创建好的xml文件,也就是你的excel模板可以放入到项目中了,接下来要做的就是将数据生成并按照标准格式输出,进行替换关键字即可。
5、数据生成并输出,如下所示:
{
//实例化内存流
MemoryStream fileStream = new MemoryStream();
//写文件流
StreamWriter fileWriter = new StreamWriter(fileStream);
//读文件流
StreamReader fileReader = new StreamReader(path, System.Text.Encoding.UTF8);
//读取整个文件的内容
string tempStr = fileReader.ReadToEnd();
//得到要导出的信息
DataTable dt = airport.GetDataView();
//定义变量获取表的数据行数
int rows = 0;
//定义StringBuilder变量来存储字符串
StringBuilder sb = new StringBuilder();
//判断表是否有数据
if (dt != null && dt.Rows.Count > 0)
{
//给变量赋值
rows = dt.Rows.Count;
int num = rows + 1;//此处1表示模板中表头的行数,且默认为1,可自行增加表头并定义
if (tempStr.IndexOf("+#RowCount#+") > 0)
{
tempStr = tempStr.Replace("+#RowCount#+", "" + num + "");
}
//开始循环生成标准字符串
for (int i = 0; i < rows; i++)
{
sb.Append("<Row>\n"
+ "<Cell><Data ss:Type=\"String\">" + dt.Rows["Name"] + "</Data></Cell>\n"
+ "<Cell><Data ss:Type=\"String\">" + dt.Rows["Sex"] + "</Data></Cell>\n"
+ "<Cell><Data ss:Type=\"String\">" + dt.Rows["Age"] + "</Data></Cell>\n"
+ "</Row>\n");
}
if (tempStr.IndexOf("+%Data%+") > 0)
{
tempStr = tempStr.Replace("+%Data%+", sb.ToString());
}
}
fileWriter.WriteLine(tempStr);
fileWriter.Flush();
byte[] bytes = fileStream.ToArray();
fileStream.Close();
fileWriter.Close();
fileReader.Close();
return bytes;
}
如上所示,创建获取数据,并返回我们要输出的字符串,并转成二进制流,具体操作因人而异。接下来调用此方法替换数据,并输出excel新文件。
{
byte[] bytes = GetData(Server.MapPath("xml模板的路径"), "");
//实现下载
Response.AddHeader("Content-Type", "application/octet-stream");
Response.Buffer = true;
Response.ContentType = "*/*";
Response.AddHeader("Content-Disposition", "
没有评论:
发表评论