.Net之路(十三)数据库导出到EXCEL
.NET中导出到Office文档(word,excel)有我理解的两种方法.一种是将导出的文件存放在server某个目录以下,利用response输出到浏览器地址栏,直接打开;还有直接利用javascript来导出html中的标签。
1.javascript导出
function AllAreaWord(areaId) {
var myDate = new Date(); //日期函数
try {
var fileName = myDate.getYear() + (myDate.getMonth() + 1) + myDate.getDate() + myDate.getMinutes() + myDate.getSeconds(); //文件名称
var areaRes = document.getElementById("showPage"); //指定要输入区域
//新建word对象
var wordObj = new ActiveXObject("Word.Application"); //指定输出类型
var docObj = wordObj.Documents.Add("", 0, 1);
var oRange = docObj.Range(0, 1);
var sel = document.body.createTextRange();
sel.moveToElementText(areaRes);
sel.select();
sel.execCommand("Copy");
oRange.Paste();
wordObj.Application.Visible = true;
docObj.saveAs("D://" + fileName + ".doc") //导出文件到指定文件夹
}
catch (e) {
alert("保存失败,请刷新本页面又一次尝试!");
}
finally {
window.location.reload();
}
}
这种方法须要浏览器创建Activex,须要勾选未知签名的Activex控件。可是这样会减少浏览器的安全性,所以总是在打开浏览器时出现这样提示用户还原默认安全设置的提示。假设不是非常了解,还原后还是不能创建ActiveXObject对象就无法创建word的对象;所以这种方法有非常大的局限性。
2.利用.NET com组件
功能:将数据库内的字段导出生成导入英语口语成绩的模板
查询指定数据库字段
/// <summary>
/// 查询数据库表字段
/// </summary>
/// <param name="tablename">数据库表名</param>
/// <returns></returns>
public DataSet GetTableName(string tablename) { //查询数据库表字段sql语句
StringBuilder str = new StringBuilder("SELECT name FROM syscolumns WHERE (id = (SELECT id FROM sysobjects WHERE name = '"+tablename+"'))"); //返回表名
DataSet ds = DBUtility.DbHelperSQL.Query(str.ToString()); return ds;
}
核心代码:SELECT name FROM syscolumns WHERE (id = (SELECT id FROM sysobjects WHERE name = tablename)
这里还有非常多有趣的sql语句,之前没有接触过的。像什么查询出该整个server全部的数据库名称等。
有兴趣见:http://www.cnblogs.com/eter/archive/2011/08/15/2139063.html
导入到excel
/// <summary>
/// 下载导入成绩的模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DownLoadTemplate(object sender, EventArgs e)
{
//找到数据库字段
QuerySpokenEnglishScoreBLL spokenEnglishScorebll = new QuerySpokenEnglishScoreBLL();
string strTablename = "T_SpokenScores";
DataSet ds = spokenEnglishScorebll.QueryTableName(strTablename);
ArrayList tablename = new ArrayList(); tablename.Add("学号");
tablename.Add("分值");
//for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
//{
// tablename.Add(ds.Tables[0].Rows[i][0]);
//} //将数据库字段写入excel
//创建excel对象
Excel.Application excel = new Excel.Application();
//创建Microsoft Excel 工作簿
Excel.Workbook Nowbook;
//推断server未安装Excel应用程序
if (excel == null)
{
throw new Exception("server未安装Excel应用程序,此功能无法使用");
} //新建工作薄赋值给Nowbook
Nowbook = excel.Workbooks.Add(); int lengthTableName = 3;
for (int i = 1; i < lengthTableName; i++)
{
Nowbook.Sheets[1].Cells[1, i] = tablename[i - 1];
} //保存在server中指定的物理路径文件
string strpath = Server.MapPath("~/UploadFile/DownFile") + "/" + "导入口语成绩模板" + ".xls";
//指定目录存放,事实上是复制一份源文件
Nowbook.SaveCopyAs(strpath); Nowbook.Close(SaveChanges: false);
Nowbook = null;
excel.Quit();
excel = null; //直接转向文件路径,直接打开
Response.Redirect("../../UploadFile/DownFile/" + "导入口语成绩模板.xls");
}
当中在測试过程中,遇到一些的问题也是比較有意思的。
问题一:
读取Excel文件时出现错误“HRESULT中的异常:0X800A03EC”。
查阅MSDN,微软的同志们是这样跟我说的。就是我每次添�到工作薄中的单元格的内容太多,太长导致的。我试了试,由于我之前用的中文最后发现不是这个问题。而是我的循环里面从0開始的。Nowbook.Sheets[1].Cells[1, i],这样导致根本就无法创建这个单元格就更别谈什么插入内容了。所以这样看来,微软的大牛把我给忽悠了一番啊!哈哈
问题二:
看到这个我首先想打的是可能会不会是权限的问题,我非常快否定这个。由于依据代码,我已经创建了这个xls文件。最后发现我的文件不是放在了指定的我訪问的文件路径,这样就对了。所以我这个用server的路径这样就能够存在指定的物理路径了。
默认情况下:使用Nowbook.saveas保存是在我的文档目录下的。
使用server地址
//保存在server中指定的物理路径文件
string strpath = Server.MapPath("~/UploadFile/DownFile") + "/" + "导入口语成绩模板" + ".xls";
//指定目录存放,事实上是复制一份源文件
Nowbook.SaveCopyAs(strpath);
就能够了。
总结
事实上对于后种方式也是有缺陷的,在打开的时候总是会提示我们是否要打开文件格式好扩展名不匹配的文件。这种方法,主要是对于excel这么一个非托管的类来实现的。在以下的链接里面有其它的方法,大家有兴趣的能够研究研究。
来自百度文库:
MSDN: 怎样使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿数据传输
http://support.microsoft.com/kb/306023/zh-cn
怎样:使用 COM Interop 创建 Excel 电子表格(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/ms173186(VS.80).aspx
怎样在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自己主动化
http://support.microsoft.com/kb/302084/zh-cn
C#中创建、打开、读取、写入、保存Excel的一般性代码
http://hi.baidu.com/zhaochenbo/blog/item/f6d70ff7bf32fa2a730eec39.html
与 XML 一起使用 Visual Basic 和 ASP 生成 Excel 2003 工作簿
http://msdn.microsoft.com/zh-cn/library/aa203722(office.11).aspx
.Net之路(十三)数据库导出到EXCEL的更多相关文章
- php将数据库导出成excel的方法
<?php $fname = $_FILES['MyFile']['name']; $do = copy($_FILES['MyFile']['tmp_name'],$fname); if ($ ...
- 【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】
一.导出到Excel 1.使用DatabaseMetaData分析数据库的数据结构和相关信息. (1)测试得到所有数据库名: private static DataSource ds=DataSour ...
- ThinkPHP中,运用PHPExcel,将数据库导出到Excel中
1.将PHPExcel插件放在项目中,本人位置是ThinkPHP文件夹下,目录结构如下/ThinkPHP/Library//Vendor/...2.直接根据模型,配置三个变量即可使用./** * Ex ...
- 数据库导出到excel
项目结构同上一篇 泛型通用的写法 ExportExcel.java package excel; import java.io.OutputStream; import java.lang.refle ...
- 从数据库导出到excel
在项目 扬中 News shenbaocreateall //选中的id string cc = Request["IDcheck"]; Response.C ...
- .Net路(十三)导出数据库到EXCEL
.NET出口Office文件(word,excel)有两种方法我明白.一个存储在导出的文件中server录以下.利用response输出到浏览器地址栏,直接打开:还有直接利用javascript来导出 ...
- 如何使用NPOI 导出到excel和导入excel到数据库
近期一直在做如何将数据库的数据导出到excel和导入excel到数据库. 首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/). 我用的NPOI1.2.5稳定版. 使 ...
- 数据库多张表导出到excel
数据库多张表导出到excel public static void export() throws Exception{ //声明需要导出的数据库 String dbName = "hdcl ...
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...
随机推荐
- C++中 指针 与 引用 的区别
四点区别:可否为空,可否修改,使用时是否需要判断,使用场景 非空区别. 引用必须指向某个对象,而指针可以指向空. 可修改区别. 引用总是与初始化时的那个对象绑定,不可变更:指针可以重新赋值,指向另外一 ...
- [Swust OJ 589]--吃西瓜(三维矩阵压缩)
题目链接:http://acm.swust.edu.cn/problem/589/ Time limit(ms): 2000 Memory limit(kb): 65535 Description ...
- 射频识别技术漫谈(26)——Felica的文件系统
Felica的文件系统使用“系统\域\服务\数据块”的结构,如下图所示.通过这种结构实现对卡片非易失性存储区的使用和操作. Fe ...
- QT实现TCP通信服务器端和客户端(支持多个客户端)精简版
上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的 ...
- QT实现,通过URL下载文件的接口实现
今天来把坑填上. 具体就是提供一个URL,并通过这个URL下载文件. MyDownloader.h: #ifndef MYDOWNLOADER_H #define MYDOWNLOADER_H cla ...
- C#中WebClient使用DownloadString中文乱码的解决办法
原文:C#中WebClient中文乱码的解决办法 第一次尝试: string question = textBox1.Text.ToString(); WebClient client= new We ...
- C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow)
原文 C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow) 今天,有网友询问,如何显示和隐藏任务栏? 我这里,发布一下使用Windows API 显 ...
- OTL使用总结
在VC中访问Oracle,可以使用ADO或ODBC,如果你比较强大,也可以直接使用OCI API,但我个人认为OTL是最佳选择,它是一套数据库访问C++模板库,全部代码都在otlv4.h头文件中,通过 ...
- java 值传递和引用传递。
java中 基本类型的参数传递是值传递,即前后两个方法的变量不相干,被调方法参数值改变不影响调用方法的传参数值. 引用数据类型的参数传递是 传递的是参数的地址.即被调方法修改参数值会,调用方法里会跟着 ...
- config.json ajenti
{ "users": { "root": { "configs": { ...