? ? 1.直接將Html轉成Word。MVC自帶FileResult很好用。Html中我們也可以嵌入自己的樣式。
? ? html:

< div id ="target" > < style > table { border-collapse : collapse ; border : 1px solid black ; } td { border : 1px royalblue solid } </ style > < img src ="../../Content/eman_sm.png" alt ="" /> < table > < tr > < td > 姓名 </ td > < td > 成績 </ td > </ tr > < tr > < td > 張山 </ td > < td > 80分 </ td > </ tr > < tr > < td > 李四 </ td > < td > 90分 </ td > </ tr > </ table > </ div > < div style ="color: red" ></ div > < a id ="ea" href ="#" > 導出word </ a > < a href ="@Url.Action(" ExportWords")" > ExportWords </ a >
<script> $( "#ea").click( function () { var html = $("#target" ).html(); window.open( "/Home/ExportWord?html=" + html); }) </script>
get方法會受到url長度的影響,可以換成隱藏的form提交。

< form id ="form1" action ="/Home/ExportWord" > < input type ="hidden" value ="" name ="html" id ="cc" /> < input type ="submit" id ="st" /> </ form > < div id ="target" > < style > table { border-collapse : collapse ; border : 1px solid black ; } td { border : 1px royalblue solid } </ style > < table > < tr > < td > 姓名 </ td > < td > 成績 </ td > </ tr > < tr > < td > 張山 </ td > < td > 80分 </ td > </ tr > < tr > < td > 李四 </ td > < td > 90分 </ td > </ tr > </ table > </ div > < div style ="color: red" ></ div > < a id ="ea" href ="#" > 導出word </ a > < a href ="@Url.Action(" ExportWords")" > ExportWords </ a > < script > $( " #ea " ).click( function () { var html = $( " #target " ).html(); $( " #cc " ).val(html); $( " #st " ).click(); }) </ script >
?
Action:
[ValidateInput( false )] public FileResult ExportWord( string html) { StringBuilder sb = new StringBuilder(); sb.Append( " <!DOCTYPE html> " ); sb.Append( " <body> " ); sb.Append(html); sb.Append( " </body> " ); var byteArray = System.Text.Encoding.Default.GetBytes(sb.ToString()); Response.ContentEncoding = System.Text.Encoding.GetEncoding( " gb2312 " ); return File(byteArray, " application/ms-word " , " wordtest " + " .doc " ); }
這樣的問題是導出的圖片是引用型的,路徑一變化就不會顯示了。優點就是速度很快。
? 2.使用Microsoft.Office.Interop.Word 提供的方法創建一個word。

/// <summary> /// 創建一個word /// </summary> /// <returns></returns> public ActionResult ExportWords() { CreateAWord(); SetPageHeader( " 測試創建一個Word文檔 " ); InsertText( " 這是一個測試文檔的內容 " , 14 , WdColor.wdColorGray10, 1 , WdParagraphAlignment.wdAlignParagraphLeft); NewLine(); InsertPicture( @" C:\Users\Administrator\Desktop\duoceshi.png " ); InsertTable(); SaveWord( @" C:\Users\Administrator\Desktop\\test.doc " ); CloseDocument( @" C:\Users\Administrator\Desktop\\test.doc " ); return null ; } /// <summary> /// Word應用對象 /// </summary> private Microsoft.Office.Interop.Word.Application _wordApplication; /// <summary> /// word 文件對象 /// </summary> private Microsoft.Office.Interop.Word.Document _wordDocument; /// <summary> /// 創建文檔 如果報錯:類型“Microsoft.Office.Interop.Word.ApplicationClass”未定義構造函數 ; 解決方法:在其中點開“引用”文件夾,在"Microsoft.Office.Interop.Word" 上點擊鼠標右鍵,選擇“屬性”,將屬性中的“嵌入互操作類型”的值改為“false”即可 /// </summary> public void CreateAWord() { // 實例化word應用對象 this ._wordApplication = new Microsoft.Office.Interop.Word.ApplicationClass(); Object myNothing = System.Reflection.Missing.Value; this ._wordDocument = this ._wordApplication.Documents.Add( ref myNothing, ref myNothing, ref myNothing, ref myNothing); } /// <summary> /// 添加頁眉 /// </summary> /// <param name="pPageHeader"></param> public void SetPageHeader( string pPageHeader) { // 添加頁眉 this ._wordApplication.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdOutlineView; this ._wordApplication.ActiveWindow.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekPrimaryHeader; this ._wordApplication.ActiveWindow.ActivePane.Selection.InsertAfter(pPageHeader); // 設置中間對齊 this ._wordApplication.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; // 跳出頁眉設置 this ._wordApplication.ActiveWindow.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekMainDocument; } /// <summary> /// 插入文字 /// </summary> /// <param name="pText"> 文本信息 </param> /// <param name="pFontSize"> 字體大小 </param> /// <param name="pFontColor"> 字體顏色 </param> /// <param name="pFontBold"> 字體粗體 </param> /// <param name="ptextAlignment"> 方向 </param> public void InsertText( string pText, int pFontSize, Microsoft.Office.Interop.Word.WdColor pFontColor, int pFontBold, Microsoft.Office.Interop.Word.WdParagraphAlignment ptextAlignment) { // 設置字體樣式以及方向 this ._wordApplication.Application.Selection.Font.Size = pFontSize; this ._wordApplication.Application.Selection.Font.Bold = pFontBold; this ._wordApplication.Application.Selection.Font.Color = pFontColor; this ._wordApplication.Application.Selection.ParagraphFormat.Alignment = ptextAlignment; this ._wordApplication.Application.Selection.TypeText(pText); } /// <summary> /// 換行 /// </summary> public void NewLine() { // 換行 this ._wordApplication.Application.Selection.TypeParagraph(); } /// <summary> /// 插入一個圖片 /// </summary> /// <param name="pPictureFileName"></param> public void InsertPicture( string pPictureFileName) { object myNothing = System.Reflection.Missing.Value; // 圖片居中顯示 this ._wordApplication.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; this ._wordApplication.Application.Selection.InlineShapes.AddPicture(pPictureFileName, ref myNothing, ref myNothing, ref myNothing); } /// <summary> /// 插入表格 /// </summary> public void InsertTable() { object myNothing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Table table1 = _wordDocument.Tables.Add(_wordApplication.Selection.Range, 4 , 3 , ref myNothing, ref myNothing); _wordDocument.Tables[ 1 ].Cell( 1 , 1 ).Range.Text = " 產品\n項目 " ; _wordDocument.Tables[ 1 ].Cell( 1 , 2 ).Range.Text = " 電腦 " ; _wordDocument.Tables[ 1 ].Cell( 1 , 3 ).Range.Text = " 手機 " ; _wordDocument.Tables[ 1 ].Cell( 2 , 1 ).Range.Text = " 重量(kg) " ; _wordDocument.Tables[ 1 ].Cell( 3 , 1 ).Range.Text = " 價格(元) " ; _wordDocument.Tables[ 1 ].Cell( 4 , 1 ).Range.Text = " 共同信息 " ; _wordDocument.Tables[ 1 ].Cell( 4 , 2 ).Range.Text = " 信息A " ; _wordDocument.Tables[ 1 ].Cell( 4 , 3 ).Range.Text = " 信息B " ; table1.Select(); table1.Rows.Alignment = Microsoft.Office.Interop.Word.WdRowAlignment.wdAlignRowCenter; // 整個表格居中 _wordApplication.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; _wordApplication.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; _wordApplication.Selection.Cells.HeightRule = Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightExactly; _wordApplication.Selection.Cells.Height = 40 ; table1.Rows[ 2 ].Height = 20 ; table1.Rows[ 3 ].Height = 20 ; table1.Rows[ 4 ].Height = 20 ; table1.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; _wordApplication.Selection.Cells.Width = 150 ; table1.Columns[ 1 ].Width = 75 ; table1.Cell( 1 , 1 ).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight; table1.Cell( 1 , 1 ).Range.Paragraphs[ 2 ].Format.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft; _wordApplication.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; _wordApplication.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; _wordApplication.Selection.Cells.HeightRule = Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightExactly; _wordApplication.Selection.Cells.Height = 40 ; table1.Rows[ 2 ].Height = 20 ; table1.Rows[ 3 ].Height = 20 ; table1.Rows[ 4 ].Height = 20 ; table1.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; _wordApplication.Selection.Cells.Width = 150 ; table1.Columns[ 1 ].Width = 75 ; table1.Cell( 1 , 1 ).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight; table1.Cell( 1 , 1 ).Range.Paragraphs[ 2 ].Format.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft; // 表頭斜線 table1.Cell( 1 , 1 ).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].Visible = true ; table1.Cell( 1 , 1 ).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Cell( 1 , 1 ).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; // 表格邊框 table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].Visible = true ; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].Visible = true ; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].Visible = true ; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDoubleWavy; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].Visible = true ; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDoubleWavy; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].Visible = true ; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].Visible = true ; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].Color = Microsoft.Office.Interop.Word.WdColor.wdColorGreen; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineWidth = Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt; table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble; // 合并單元格 // _wordDocument.Tables[1].Cell(4, 2).Merge(table1.Cell(4, 3)); } [DllImport( " shell32.dll " )] public static extern int ShellExecute(IntPtr hwnd, String lpszOp, String lpszFile, String lpszParams, String lpszDir, int FsShowCmd); /// <summary> /// 關閉文檔 /// </summary> public void CloseDocument( string fileName) { object myNothing = System.Reflection.Missing.Value; // 關閉文檔 object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; _wordDocument.Close( ref myNothing, ref myNothing, ref myNothing); _wordApplication.Application.Quit( ref saveOption, ref myNothing, ref myNothing); _wordDocument = null ; _wordApplication = null ; // ShellExecute(IntPtr.Zero, "open", fileName, "", "", 3); } /// <summary> /// 保存文件 /// </summary> /// <param name="pFileName"> 文件名 </param> public void SaveWord( string pFileName) { object myNothing = System.Reflection.Missing.Value; object myFileName = pFileName; object myWordFormatDocument = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument; object myLockd = false ; object myPassword = "" ; object myAddto = true ; try { this ._wordDocument.SaveAs( ref myFileName, ref myWordFormatDocument, ref myLockd, ref myPassword, ref myAddto, ref myPassword, ref myLockd, ref myLockd, ref myLockd, ref myLockd, ref myNothing, ref myNothing, ref myNothing, ref myNothing, ref myNothing, ref myNothing); } catch (Exception exception) { throw new Exception( " 保存word文檔失敗! " ); } }
?圖片倒是保存住了,可配置的地方很多,速度有些慢,代碼量頗多。
?3.如果要導出excel 還是用NPOI最好。? http://www.cnblogs.com/lwme/archive/2011/11/18/npoi_excel_import_export.html
? 調用該博主ExcelRender中的方法,返回File。 不然網上的其他辦法都很有問題,要么打不開,要么服務器沒裝office就不行了。
public FileResult ExportExcel() { DataTable table = new DataTable(); table.Columns.Add( " aa " , typeof ( string )); table.Columns.Add( " bb " , typeof ( string )); table.Columns.Add( " cc " , typeof ( string )); for ( int i = 0 ; i < 10 ; i++ ) { string a = DateTime.Now.Ticks.ToString(); Thread.Sleep( 1 ); string b = DateTime.Now.Ticks.ToString(); Thread.Sleep( 1 ); string c = DateTime.Now.Ticks.ToString(); Thread.Sleep( 1 ); table.Rows.Add(a, b, c); } var ms= ExcelRender.RenderToExcel(table); return File(ms, " application/vnd.ms-excel " , " 考試成績.xls " ); }
?4. Excel導入。
? file就是一個HttpPostedFileBase 對象。即上傳的excel文件。用ExcelRender 轉換為table 再進行插入數據庫的操作。
byte [] filebBytes = new byte [file.ContentLength]; file.InputStream.Read(filebBytes, 0 , file.ContentLength); var table = ExcelRender.RenderFromExcel( new MemoryStream(filebBytes), 0 , 0 );
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
