C#中利用Aspose.Words直接将数据写到word里

      有时候,我们需要从asp页面导出用户需要的一些表单。在网上最常见的是gridview导出到word,但gridview有很大的局限性就是样式不好设计。还有其他的一些方法能导出在asp中已经设计好的table。而我的页面由于数据不固定,table是由后台动态生成的,所以很难导出。查了很多资料,发现Aspose.Words挺好用的,虽然不是真正意义上从asp页面导出(你可以直接从数据库读取写入页面的数据,把它写入到单元格,然后画到word中),但能完美的"导出"了我要的表单。下面给大家一个我做的demo。

由于数据需要一条条的插入,所以先把插入单元格的代码写入一个类。(前提是先引入Aspose.Words.dll

 public class InsertCells
    { 
       /// <summary>
       /// 插入一个包含内容的单元格
       /// </summary>
       /// <param name="builder">操作对象</param>
       /// <param name="Str">写入的内容</param>
       /// <param name="width">单元格的宽度</param>
        public void Insert(DocumentBuilder builder, string Str, int width)
        {
            //设置表格行高度
            builder.RowFormat.Height = 20;
            //插入Table单元格
            builder.InsertCell();
            //Table单元格边框线样式
            builder.CellFormat.Borders.LineStyle = LineStyle.Hairline;
            builder.CellFormat.Borders.Color = System.Drawing.Color.White;
            //设置单元格宽度
            builder.CellFormat.Width = width;
            //此单元格中内容垂直对齐方式
            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
            //此单元格中内容水平对齐方式
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
            //字体大小
            builder.Font.Size = 12;
            //是否加粗
            builder.Bold = false;
            //向此单元格中添加内容
            builder.Write(Str);
        }
    }
然后写一个按钮点击事件来“导出”数据到word。
 /// <summary>
        /// 导出word文档
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btn_word_Click(object sender, EventArgs e)
        {
            //new一个类的对象
            InsertCells insertcell = new InsertCells();
            //创建word操作对象
            Aspose.Words.Document doc = new Aspose.Words.Document();
            DocumentBuilder builder = new DocumentBuilder(doc);
            //清除设置
            builder.PageSetup.ClearFormatting();
            //开始画Table
            builder.StartTable();
            //使整个表格在页面居中
            builder.RowFormat.Alignment = Aspose.Words.Tables.RowAlignment.Center;
            string cont = string.Empty;
            //定义word的标题
            string title = "导出的表格" + "(@@@)";
            //标题居中
            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
            //字体不加粗
            builder.Bold = false;
            //字体大小
            builder.Font.Size = 16;
            //将标题写入word
            builder.Writeln(title);
            //写一个空行
            builder.Writeln("");
            string name = "我是谁:??";
            //插入一个单元格
            insertcell.Insert(builder, name, 100);
            string job = "不知道:??";
            insertcell.Insert(builder, job, 150);
            string time = "调查时间:????-????";
            insertcell.Insert(builder, time, 290);
            //行结束
            builder.EndRow();
            //插入空的单元格
            insertcell.Insert(builder, "", 540);
            builder.EndRow();
            //用循环插入问题行
            for (int i = 0; i < 5; i++)
            {

                cont = (i + 1) + ".  " + "我是第" + (i + 1) + "个问题";
                insertcell.Insert(builder, cont, 540);
                builder.EndRow();
                //用循环插入每个问题的答案,因为答案为双列,用判断语句排一下
                for (int j = 0; j < 3; j++)
                {
                    //奇数且不是最后一个答案,插入包含此答案的单元格,不换行
                    if (j % 2 == 0 && j < 2)
                    {
                        cont = Convert.ToChar(j + 97) + ".  " + "答案 " + Convert.ToChar(j + 97);                       
                        insertcell.Insert(builder, cont, 270);
                    }
                    //奇数且是最后一个答案,插入包含此答案的单元格,再插入一个空的单元格,换行
                    else if (j % 2 == 0 && j == 2)
                    {
                        cont = Convert.ToChar(j + 97) + ".  " + "答案 " + Convert.ToChar(j + 97);
                        insertcell.Insert(builder, cont, 270);
                        insertcell.Insert(builder, "", 270);
                        //Table行结束
                        builder.EndRow();
                    }
                    //偶数答案,插入包含此答案的单元格,换行
                    else
                    {   
                        cont = Convert.ToChar(j + 97) + ".  " + "答案 " + Convert.ToChar(j + 97);
                        insertcell.Insert(builder, cont, 270);
                        builder.EndRow();
                    } 
                }
                //每个问题与下一个问题间插入一个空行单元格
                insertcell.Insert(builder, "", 540);
                builder.EndRow();    
            }
            //Table表结束
            builder.EndTable();        
            string filename = "问题调查表.doc";
            //以下载Word的形式打开Wrod
            SaveOptions options = SaveOptions.CreateSaveOptions(SaveFormat.Doc);
            doc.Save(Response, filename, ContentDisposition.Attachment, options);
        }

OK,作为初学者,写的东西可能很浅,只希望能给其他的初学者一些帮助。大神莫吐槽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值