最近要做MVC导出Word报表功能。查了查资料发现一个好用的插件就是Aspose.Word。这个插件也很有名气,也很好用。
1.首先就是引用该插件
2.填充Word模版
3.后台操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
private List< double > QuaterAirPM10AvgVolReport( string stns, DateTime start, DateTime end, Aspose.Words.DocumentBuilder builder, out DataTable dt, out List< double > widthList, string isMax)
{
dt = QuaterPM10AvgVol (stns, start, end,isMax);
widthList = new List< double >();
double [] colWidth = new double [] { 50, 118, 117, 50, 118, 117 };
string [] colName = new string [] { "排序" , "城市" , start.Year + "年" + start.Month + "~" +end.Month+ "月浓度(μg/m3)" , "排序" , "城市" , "较" + start.AddYears(-1).Year + "年同期增幅" };
builder.MoveToBookmark( "table3" );
Aspose.Words.Tables.Table table = builder.StartTable(); //开始画Table
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Width = 285;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
// builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
builder.Write( "按平均浓度排序" );
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
// builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = 285;
builder.Write( "按" + start.AddYears(-1).Year + "年同期增幅排序" );
builder.EndRow();
AsposeCreateCell(builder, colWidth[0], colName[0]);
AsposeCreateCell(builder, colWidth[1], colName[1]);
AsposeCreateCell(builder, colWidth[2], colName[2]);
AsposeCreateCell(builder, colWidth[3], colName[3]);
AsposeCreateCell(builder, colWidth[4], colName[4]);
AsposeCreateCell(builder, colWidth[5], colName[5]);
builder.EndRow();
//开始添加值
for (var i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][ "CityName" ] == "12个考核地市" || dt.Rows[i][ "CityName" ] == "全省" )
{
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Width = 168;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder.Write(dt.Rows[i][ "CityName" ].ToString());
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = 117;
builder.Write(dt.Rows[i][ "PM10ATI" ].ToString());
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = 168;
builder.Write(dt.Rows[i][ "qnCityName" ].ToString());
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = 117;
builder.Write(dt.Rows[i][ "tqbh" ].ToString() + "%" );
}
else
{
AsposeCreateCell(builder, colWidth[0], dt.Rows[i][ "Sort" ].ToString());
AsposeCreateCell(builder, colWidth[1], dt.Rows[i][ "CityName" ].ToString());
AsposeCreateCell(builder, colWidth[2], dt.Rows[i][ "PM10ATI" ].ToString());
AsposeCreateCell(builder, colWidth[3], dt.Rows[i][ "qnSort" ].ToString());
AsposeCreateCell(builder, colWidth[4], dt.Rows[i][ "qnCityName" ].ToString());
AsposeCreateCell(builder, colWidth[5], dt.Rows[i][ "tqbh" ].ToString() + "%" );
}
builder.EndRow();
}
builder.EndTable();
return widthList;
}
|
其中有几个注意的地方 builder.CellFormat.VerticalMerge = CellMerge.None;CellMerge是枚举类型,经常用到画复杂的表格,或者是合并单元格。还有First和Previous。先要得到DataTable数据,最后对数据进行操作就行了。
4.输出文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public JsonResult QuaterResponse()
{
bool result;
string quarter = Request[ "quarter" ].ToString();
string stns = Request[ "stns" ].ToString();
string isMax = Request[ "ismax" ].ToString();
DateTime startTime = Convert.ToDateTime(Request[ "startdate" ]);
DateTime endTime = Convert.ToDateTime(Request[ "enddate" ]);
string tmppath = Server.MapPath( "~/Document/Model/QuaterReport.docx" );
string path = Server.MapPath( "~/Document/Export/QuaterReport.doc" );
Aspose.Words.Document doc = new Document(tmppath);
Aspose.Words.DocumentBuilder builder = new DocumentBuilder(doc);
doc.Range.Bookmarks[ "title" ].Text = startTime.Year+ "年" +quarter+ "湖北省环境空气质量监测情况综述" ;
doc.Range.Bookmarks[ "title1" ].Text = "表1 " +quarter+ "空气质量等级" ;
doc.Range.Bookmarks[ "title2" ].Text = "表2" +quarter+ "优良天数达标率情况表" ;
doc.Range.Bookmarks[ "title3" ].Text = "表3 " +quarter+ "空气可吸入颗粒物(PM10)平均浓度情况表" ;
doc.Range.Bookmarks[ "title4" ].Text = "表4 " +quarter+ "空气可吸入颗粒物(PM2.5)平均浓度情况表" ;
doc.Range.Bookmarks[ "title5" ].Text = "表5" +quarter+ " 境空气气态污染物平均浓度情况表" ;
doc.Range.Bookmarks[ "title6" ].Text = "表6 " +quarter+ "环境空气质量综合指数情况表" ;
DataTable dt;
List< double > widthList;
try
{
doc.Range.Bookmarks[ "table1" ].Text = "" ; // 清掉标示
QuaterAirPerencetReport( stns, startTime, endTime, builder, out dt, out widthList,isMax);
doc.Range.Bookmarks[ "table2" ].Text = "" ;
QuaterAirYldblReport(stns, startTime, endTime, builder,quarter, out dt, out widthList,isMax);
doc.Range.Bookmarks[ "table3" ].Text = "" ;
QuaterAirPM10AvgVolReport(stns, startTime, endTime, builder, out dt, out widthList,isMax);
doc.Range.Bookmarks[ "table4" ].Text = "" ;
QuaterAirPM25AvgVolReport(stns, startTime, endTime, builder, out dt, out widthList,isMax);
doc.Range.Bookmarks[ "table5" ].Text = "" ;
QuaterOtherAvgVolReport(stns, startTime, endTime, builder, out dt, out widthList,isMax);
doc.Range.Bookmarks[ "table6" ].Text = "" ;
QuaterZHIndexReport(stns, startTime, endTime, builder, out dt, out widthList,isMax);
doc.Save(path, Aspose.Words.SaveFormat.Doc);
// System.Diagnostics.Process.Start(path);//打开文档
// return View("QuaterReport");
result = true ;
}
catch (Exception)
{
result = false ;
}
return Json(result);
}
|
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!
原文链接:http://www.cnblogs.com/yafuture/p/6471911.html