.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],这样导致根本就无法创建这个单元格就更别谈什么插入内容了。所以这样看来。微软的大牛把我给忽悠了一番啊!

哈哈

问题二:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmZhbmdsaW5jZmw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="529" height="107" alt="">

看到这个我首先想打的是可能会不会是权限的问题,我非常快否定这个。由于依据代码,我已经创建了这个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. 从Mongo导出数据库到Excel

    在MongoDB的安装目录的bin文件夹下打开命令行: ./mongoexport -d kugou_db -c songs -f rank,singer,song,time --type=csv - ...

  2. phpexcel导出数据库成excel文件

    <?php error_reporting(E_ALL); date_default_timezone_set('Europe/London'); /** PHPExcel */ require ...

  3. 【django基础】django接口 异步ajax请求 导出数据库成excel表(包裹前端后端)

    py文件: from django.utils.http import urlquote from rest_framework.views import APIView from django.sh ...

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

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

  5. Excel导出数据库数据

    package com.hxkr.util; import java.io.FileOutputStream; import java.util.ArrayList; import java.util ...

  6. .net数据库实现Excel的导入与导出

    .net数据库实现Excel的导入与导出 参考路径:https://www.cnblogs.com/splendidme/archive/2012/01/05/2313314.html 1.defau ...

  7. java导出数据到excel里:直接导出和导出数据库数据

    一.直接导出 package com.ij34.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; ...

  8. 从数据库导出数据到excel之List<List<Object>>导出

    说明:有时候数据处理为List<List<Object>>更方便 姊妹篇:从数据库导出数据到excel之List<Map<>>导出 兄弟篇:从数据库导出 ...

  9. 从数据库导出数据到excel之POI操作

    项目说明: 1:数据库中有两张表,主键关联 2:根据条件查询数据 3:处理为需要的数据封装类型,然后传到导出excel的方法中 <--框架部署就不详谈了,用的spring框架--> 补充: ...

随机推荐

  1. C# - ref

    The ref keyword causes an argument to be passed by reference, not by value. The effect of passing by ...

  2. Effective C++_笔记_条款09_绝不在构造和析构过程中调用virtual函数

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 为方便采用书上的例子,先提出问题,在说解决方案. 1 问题 1: ...

  3. Git Hub,eclipse pull 出现问题

    一般在eclise里面使用geithub,之后会出现无法pull,或者pull 报错的问题.这里需要修改本地库的配置文件 The current branch is not configured fo ...

  4. Windows server 2008 R2实现多用户远程连接

    原文 Windows server 2008 R2实现多用户远程连接 经常使用远程桌面的朋友可能会注意到,Windows server 2008 R2中,远程桌面最多只允许两个人远程连接,第三个人就无 ...

  5. 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式

    腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式 某移动公司实时 ...

  6. DataGridView ——管理员对用户的那点操作

    记得第一次做机房收费系统的时候,就在加入删除用户这出现了点小问题,由于一直都是一个容不得一点瑕疵的人.所以对查询用户的时候查询一次就会多一些空行我非常是不能容忍.看似非常小的问题,我却花了非常长的时间 ...

  7. 开始AFNetworking

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 This ...

  8. Ajax技术--考试计时并自动提交试卷

    1.概述 在开发网络考试系统时,考试计时并自动提交试卷是必不可少的功能.由于在答卷过程中,试卷不能刷新,所以需要使用Ajax实现无刷新操作.运行本实例,访问准备考试页面index.jsp,在该页面中, ...

  9. 与众不同 windows phone (12) - Background Task(后台任务)之 PeriodicTask(周期任务)和 ResourceIntensiveTask(资源密集型任务)

    原文:与众不同 windows phone (12) - Background Task(后台任务)之 PeriodicTask(周期任务)和 ResourceIntensiveTask(资源密集型任 ...

  10. QML中多样化的ListModel(MultiDelegate)

    在QML的官方例子里面, 基本上都是一样的Delegate, 也就是说不管数据怎样, 样式都是不变的. 如果我们想要根据不同的数据类型来显示不同的UI该怎么办? 这里有一个例子. DataBank L ...