.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的更多相关文章

  1. php将数据库导出成excel的方法

    <?php $fname = $_FILES['MyFile']['name']; $do = copy($_FILES['MyFile']['tmp_name'],$fname); if ($ ...

  2. 【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

    一.导出到Excel 1.使用DatabaseMetaData分析数据库的数据结构和相关信息. (1)测试得到所有数据库名: private static DataSource ds=DataSour ...

  3. ThinkPHP中,运用PHPExcel,将数据库导出到Excel中

    1.将PHPExcel插件放在项目中,本人位置是ThinkPHP文件夹下,目录结构如下/ThinkPHP/Library//Vendor/...2.直接根据模型,配置三个变量即可使用./** * Ex ...

  4. 数据库导出到excel

    项目结构同上一篇 泛型通用的写法 ExportExcel.java package excel; import java.io.OutputStream; import java.lang.refle ...

  5. 从数据库导出到excel

    在项目 扬中 News shenbaocreateall //选中的id string cc = Request["IDcheck"];            Response.C ...

  6. .Net路(十三)导出数据库到EXCEL

    .NET出口Office文件(word,excel)有两种方法我明白.一个存储在导出的文件中server录以下.利用response输出到浏览器地址栏,直接打开:还有直接利用javascript来导出 ...

  7. 如何使用NPOI 导出到excel和导入excel到数据库

    近期一直在做如何将数据库的数据导出到excel和导入excel到数据库. 首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/). 我用的NPOI1.2.5稳定版. 使 ...

  8. 数据库多张表导出到excel

    数据库多张表导出到excel public static void export() throws Exception{ //声明需要导出的数据库 String dbName = "hdcl ...

  9. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...

随机推荐

  1. ZOJ 2770 Burn the Linked Camp(spfa&&bellman)

    //差分约束 >=求最长路径 <=求最短路径 结果都一样//spfa#include<stdio.h> #include<string.h> #include< ...

  2. Foundation 框架 NSString常用总结

    iOS开发过程中,从始至终都会和NSString打交道,在此总结一下NSString的常用的方法,在以后的学习过程中用到的方法也会继续添加 NSString类是Foundation框架中得不可变字符串 ...

  3. iOS网络请求基础

    这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论. iOS在9.0之后彻底放弃了NSURLConnection,现在已经改用了NSURLSession进行网络请求.一般现在 ...

  4. SQLite For .Net 已经整合了32位和64位

    以前引用SQLite.DLL的时候,如果是winform等桌面程序,还要分32位和64位不一样的DLL,但最近已经整合为一个包了 打开vs的程序包管理器控制器,输入: install-package ...

  5. libuv 错误号UV_ECANCELED 的处理

    这个地方有好多的不明白,也没仔细的看懂代码,希望有牛人指点. 先记录几个issue 1. after_write recv many(>10000) ECANCELED in my write_ ...

  6. Java判断字符串是中文还是英文

    在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...

  7. iOS自动自动隐藏软键盘

    自动隐藏软键盘,分为两步,一个是单击软键盘外部任意空间:另外一个是单击软键盘上的return键.下面依次实现 单击软键盘外部空间键隐藏软键盘: 一:在viewDidLoad中添加一个UITabGest ...

  8. 解决python2.7.9以下版本requests访问https的问题

    在python2.7.9以下版本requests访问https连接后,总会报一些关于SSL warning. 解决法子可以参考:https://urllib3.readthedocs.io/en/la ...

  9. poj 2653 计算几何

    #include <iostream> #include <cstring> #include <algorithm> #include <cmath> ...

  10. The Standard Librarian: I/O and Function Objects: Containers of Pointers

    C++ Experts Forum The Standard Librarian: I/O and Function Objects: Containers of Pointers Matthew A ...