using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.IO;
using System.Data.SqlClient;
using System.Data;
namespace WebApplication1
{
    public partial class PrintWord : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // QueryDataSet();
        }
        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnPrint_Click(object sender, EventArgs e)
        {
            Print();
        }
        /// <summary>
        /// 导出Word 
        ///生成word解决方案
        ///1.先引入模板
        ///2.判断是否和查询数据集一样的行,如果小于数据集就要增到行数
        ///3. 获取表格并且并且为每一个单元格赋值
        ///4.根据不同的条件来设置单元格的颜色变化
        /// </summary>
        private void Print()
        {
            //先引入word
            Microsoft.Office.Interop.Word.Application app; //明一个应用
            Microsoft.Office.Interop.Word.Document doc;  //创建一个文档
            string TemplateFile = ""; // 声明要使用的模板名称
            string FileName = ""; // 新文件的路径名称
            string Fname = ""; //新文件名称
            app = new Microsoft.Office.Interop.Word.Application();//创建实例应用
            doc = new Microsoft.Office.Interop.Word.Document();  //创建实例文档
            TemplateFile = Server.MapPath("~/test/半月带预测-长安汽车每日快报2015010x.dot"); //Server.MapPath("~/test/CAXSMB.dot");//找到模板
            Fname = DateTime.Now.ToString("测试相同的文档名试试") + ".doc";//创建新文件的名称 yyyymmddhhmmss
            FileName = Server.MapPath("~/test/download/" + Fname);//新文件的路径
            //判断有相同的文档就要删除
            if (File.Exists(FileName))
            {
                File.Delete(FileName);
            }
            File.Copy(TemplateFile, FileName);//把模板拷贝到新文件
            //为新文件设置属性
            object Obj_FileName = FileName;
            object Visible = false;
            object ReadOnly = false;
            object missing = System.Reflection.Missing.Value;
            //创建新文档
            doc = app.Documents.Open(
            ref Obj_FileName, ref missing, ref ReadOnly, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref Visible,
            ref missing, ref missing, ref missing,
            ref missing);
            //增加表格
            //DataSet ds = GetDataSet();//获取程序集合
            //int dsCount = ds.Tables[0].Rows.Count;//得到数据库表中的数据
            //int docCount = doc.Tables[1].Rows.Count; //得到文档中表格的数据
            //if (dsCount > docCount) //当实际数据大约表格数据的时候创建行
            //{
            //    //开始增加行
            //    Microsoft.Office.Interop.Word.Table newTable = doc.Tables[1];
            //    for (int row = 0; row < dsCount - docCount; row++)
            //    {
            //        object beforeRow = doc.Tables[1].Rows[docCount-1];
            //        doc.Tables[1].Rows.Add(ref beforeRow); // 行添加到表格中
            //    }
            //}
            doc.Activate();
        
            // 匹配表格数据集
           
            Microsoft.Office.Interop.Word.Document odoc = GetDocument(FileName);//获取新生的文档
            DataSet ds = GetDataSet();//获取程序集合
            //开始判断里面有几个表格/因为模板里面有三张表
            for (int tablePos = 1; tablePos <= odoc.Tables.Count; tablePos++)
            {
                //都一张表的时候
                if (tablePos == 1)
                {
                    int dsCount = ds.Tables[0].Rows.Count;//得到数据库表中的数据
                    int docCount = odoc.Tables[1].Rows.Count; //得到文档中表格的数据
                    if (dsCount > docCount) //当实际数据大约表格数据的时候创建行
                    {
                        //开始增加行
                        Microsoft.Office.Interop.Word.Table newTable = doc.Tables[1];
                        for (int row = 0; row < (dsCount - docCount)+1; row++)
                        {
                            object beforeRow = newTable.Rows[docCount];
                            newTable.Rows.Add(ref beforeRow); // 行添加到表格中
                        }
                    }
                    //表格完成之后开始增加数据,为单元格赋值
                    for (int rcount = 0; rcount < ds.Tables[0].Rows.Count; rcount++)
                    {
                        for (int ccount = 0; ccount < ds.Tables[0].Columns.Count; ccount++)
                        {
                            //doc.Tables[1].Rows[rowPos].Cells[columPos].Range.Text
                            string strText = ds.Tables[0].Rows[rcount][ccount].ToString();
                            doc.Tables[1].Rows[rcount+2].Cells[ccount + 1].Range.Text = strText;//从第二行开始算起
                            if (strText == "r")
                            {
                                doc.Tables[1].Rows[rcount+2].Cells[ccount + 1].Range.Shading.BackgroundPatternColor = Microsoft.Office.Interop.Word.WdColor.wdColorLightBlue;
                            }
                        }
                    }
                }
            }
            //关闭进程
            object IsSave = true;
            doc.Close(ref IsSave, ref missing, ref missing);
            app.Quit(ref IsSave, ref missing, ref missing);            //关闭word进程
            string url = "~/test/download/" + Fname; ;
            Response.Redirect(url);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(app);    //释放内存空间 
        }
        /// <summary>
        /// 查询数据集
        /// </summary>
        /// <returns></returns>
        public DataSet GetDataSet()
        {
            string sConnectionString = "server=.;uid=sa;pwd=123456;database=xiaoshoudb";
            SqlConnection objConn = new SqlConnection(sConnectionString);
            objConn.Open();
            SqlDataAdapter da = new SqlDataAdapter("select * from  yuexiaoshou", objConn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            objConn.Close();
            return ds;
        }
        /// <summary>
        /// 根据文件地址得到该文件下属性
        /// </summary>
        /// <param name="fileRoad"></param>
        /// <returns></returns>
        public Microsoft.Office.Interop.Word.Document GetDocument(string fileRoad)
        {
            Microsoft.Office.Interop.Word.Application app;
            app = new Microsoft.Office.Interop.Word.Application();
            object oFileName = fileRoad;  //Server.MapPath(fileRoad);//根据word的路径         //("~/test/测试读写.docx");  // @"F:\数据库.docx";
            object oReadOnly = false;
            object oMissing = System.Reflection.Missing.Value;
            Microsoft.Office.Interop.Word._Application oWord;
            Microsoft.Office.Interop.Word.Document oDoc;
            oWord = new Microsoft.Office.Interop.Word.Application();
            oWord.Visible = false;
            oDoc = oWord.Documents.Open(ref oFileName, ref oMissing, ref oReadOnly, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            return oDoc;
        }
    }
}

C# 导出word 表格代码的更多相关文章

  1. poi导出word表格跨行

    DataCommon.java package com.ksource.pwlp.model.statistic; public class DataCommon { private Long id; ...

  2. poi导出word表格详解 超详细了

    转:非常感谢原作者 poi导出word表格详解 2018年07月20日 10:41:33 Z丶royAl 阅读数:36138   一.效果如下 二.js代码 function export_word( ...

  3. PowerDesiger 15逆向生成工程E-R图及导出word表格

    应用环境:win8(64位)+oracle10g(32位)服务端+PowerDesigner15 需求:oracle数据库中的表结构是web工程框架hibernate 自动生成,现需要将数据库中已有的 ...

  4. c#(.net) 导出 word表格

    做了差不多一周的导出Word,现在把代码贴出来   : ExportWord.cs using System; using System.Collections.Generic; using Syst ...

  5. poi导出word表格

    代码如下: package com.ksource.pwlp.util; import java.io.FileOutputStream; import java.math.BigInteger; i ...

  6. .net使用AsposeWord导出word table表格

    本文为原创,转载请注明出处 1.前言 .net平台下导出word文件还可以使用Microsoft.Office.Interop和NPOI,但是这两者都有缺点,微软的Office.Interop组件需要 ...

  7. Java使用velocity导出word

    效果展示: 使用word编辑好模板

  8. Freemarker + xml 实现Java导出word

    前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格式之后的wordxml实现导出功能.导出word的代码是可 ...

  9. 使用NPOI2.1.3.1版本导出word附带表格和图片

    原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral 最近项目 ...

随机推荐

  1. 用jquery-easyui的布局layout写后台管理页面

    先在官网下载easyui文档 引入头部文件 <link rel="stylesheet" type="text/css" href="${pag ...

  2. 构建秘钥对验证的SSH体系

    构建秘钥对验证的SSH 体系 首先先要在ssh 客户端以root用户身份创建秘钥对 客户端将创建的公钥文件上传至ssh服务器 服务器将公钥信息导入用户root的公钥数据库文件 客户端以root用户身份 ...

  3. 删数据ORA-02292主键约束问题

    通常在删除某个表A的时候,会出现这个错误.原因是另一个表B的某个字段引用了A表的某个字段作为约束(这个的另一个说法是外键). 假如引用的字段叫field,当B.field = A.field , 而你 ...

  4. pyhton 网络爬取软考题库保存text

    #-*-coding:utf-8-*-#参考文档#https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-al ...

  5. 一个电商项目的Web服务化改造2:现有项目的5个问题

         最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.      有点挑战,做完了,会有很大进步, 1.现有项目的问题   1.1代码风格不统一     不同的 ...

  6. Python 5 运算符

    数学运算符: + 加                 1 + 1 = 2 -   减 2 - 1 = 1 ×  乘 2 × 2 = 4 /   除 3 / 2 = 1.5 不同版本可能显示小数位数不同 ...

  7. 清北学堂模拟赛d1t4 一道图论好题(graph)

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,不仅有边权还有点权. LYK给出了一个子图的定义,一张图G’={V’,E’}被称作G的子图,当且仅当 ·G ...

  8. vs2005添加include lib文件目录

    vs2005添加include lib文件目录 http://blog.sina.com.cn/s/blog_79489160010145wb.html 1. 添加编译所需要的 lib 文件 [解决方 ...

  9. VM 与主机不通的解决方法

    [root@localhost network-scripts]# ping 192.168.1.222 PING 192.168.1.222 (192.168.1.222) 56(84) bytes ...

  10. 记一次ruby的安装

    1,下载rubyinstall 安装包及devkit包 登陆网站 :http://rubyinstaller.org/downloads/ 安装rubyinstall包时添加到环境变量 2,安装完in ...