NET Core匯出word文件(基本包含word中所有的設定)
阿新 • • 發佈:2022-03-06
下載需要的GET包
名稱空間
using Microsoft.Office.Interop.Word; using System; using System.IO; using System.Reflection; using MSWord = Microsoft.Office.Interop.Word;
核心程式碼
namespace ETWord { public class WordHelper { public static void CreateWordFile(string filePath)//filePath:檔案儲存路徑(包括(word文件|*.docx)文件名){ try { CreateFile(filePath); // MessageFilter.Register(); object wdLine = WdUnits.wdLine;//一個線段 object oMissing = Missing.Value;//表示這個引數可以傳入預設值 object fileName = filePath;object heading2 = WdBuiltinStyle.wdStyleHeading2;//標題一 object heading3 = WdBuiltinStyle.wdStyleHeading3;//標題二 string strContent;//文字內容變數 _Application wordApp = new Application();//建立一個word程序 wordApp.Visible = true;//word程序是否可見 _Document wordDoc = wordApp.Documents.Open(reffileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);//開啟word程序 Object Nothing = Missing.Value; //由於使用的是COM庫,因此有許多變數需要用Missing.Value代替 // wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing); #region 頁面設定、頁首圖片和文字設定,最後跳出頁首設定 //頁面設定 wordDoc.PageSetup.PaperSize = MSWord.WdPaperSize.wdPaperA4;//設定紙張樣式為A4紙 wordDoc.PageSetup.Orientation = MSWord.WdOrientation.wdOrientPortrait;//排列方式為垂直方向 wordDoc.PageSetup.TopMargin = 57.0f; wordDoc.PageSetup.BottomMargin = 57.0f; wordDoc.PageSetup.LeftMargin = 57.0f; wordDoc.PageSetup.RightMargin = 57.0f; wordDoc.PageSetup.HeaderDistance = 30.0f;//頁首位置 //設定頁首 wordApp.ActiveWindow.View.Type = MSWord.WdViewType.wdNormalView;//普通檢視(即頁面檢視)樣式 wordApp.ActiveWindow.View.SeekView = MSWord.WdSeekView.wdSeekPrimaryHeader;//進入頁首設定,其中頁首邊距在頁面設定中已完成 wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphRight;//頁首中的文字右對齊 //插入頁首圖片(測試結果圖片未插入成功) wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter; string headerfile = Environment.CurrentDirectory + "\\6.jpg"; MSWord.InlineShape shape1 = wordApp.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(headerfile, ref Nothing, ref Nothing, ref Nothing); shape1.Height = 5;//強行設定貌似無效,圖片沒有按設定的縮放——圖片的比例並沒有改變。 shape1.Width = 20; wordApp.ActiveWindow.ActivePane.Selection.InsertAfter(" 文件頁首");//在頁首的圖片後面追加幾個字 //去掉頁首的橫線 wordApp.ActiveWindow.ActivePane.Selection.ParagraphFormat.Borders[MSWord.WdBorderType.wdBorderBottom].LineStyle = MSWord.WdLineStyle.wdLineStyleNone; wordApp.ActiveWindow.ActivePane.Selection.Borders[MSWord.WdBorderType.wdBorderBottom].Visible = false; wordApp.ActiveWindow.ActivePane.View.SeekView = MSWord.WdSeekView.wdSeekMainDocument;//退出頁首設定 #endregion #region 頁碼設定並新增頁碼 //為當前頁新增頁碼 MSWord.PageNumbers pns = wordApp.Selection.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers;//獲取當前頁的號碼 pns.NumberStyle = MSWord.WdPageNumberStyle.wdPageNumberStyleNumberInDash;//設定頁碼的風格,是Dash形還是圓形的 pns.HeadingLevelForChapter = 0; pns.IncludeChapterNumber = false; pns.RestartNumberingAtSection = false; pns.StartingNumber = 0; //開始頁頁碼? object pagenmbetal = MSWord.WdPageNumberAlignment.wdAlignPageNumberCenter;//將號碼設定在中間 object first = true; wordApp.Selection.Sections[1].Footers[MSWord.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers.Add(ref pagenmbetal, ref first); #endregion #region 行間距與縮排、文字字型、字號、加粗、斜體、顏色、下劃線、下劃線顏色設定 wordApp.Selection.ParagraphFormat.LineSpacing = 16f;//設定文件的行間距 wordApp.Selection.ParagraphFormat.FirstLineIndent = 30;//首行縮排的長度 //寫入普通文字 strContent = "我是普通文字\n"; wordDoc.Paragraphs.Last.Range.Text = strContent; wordDoc.Paragraphs.Last.Range.Text = "我再加一行試試,這裡不加'\\n'"; //直接新增段,不是覆蓋( += ) wordDoc.Paragraphs.Last.Range.Text += "不會覆蓋的,"; //新增在此段的文字後面,不是新段落 wordDoc.Paragraphs.Last.Range.InsertAfter("這是後面的內容\n"); //將文件的前4個字替換成"哥是替換文字",並將其顏色設為紅色 object start = 0; object end = 4; MSWord.Range rang = wordDoc.Range(ref start, ref end); rang.Font.Color = MSWord.WdColor.wdColorRed; rang.Text = "哥是替換文字"; wordDoc.Range(ref start, ref end); //寫入黑體文字 object unite = MSWord.WdUnits.wdStory; wordApp.Selection.EndKey(ref unite, ref Nothing);//將游標移到文字末尾 wordApp.Selection.ParagraphFormat.FirstLineIndent = 0;//取消首行縮排的長度 strContent = "這是黑體文字\n"; wordDoc.Paragraphs.Last.Range.Font.Name = "黑體"; wordDoc.Paragraphs.Last.Range.Text = strContent; //寫入加粗文字 strContent = "這是粗體文字\n"; // wordApp.Selection.EndKey(ref unite, ref Nothing);//這一句不加,有時候好像也不出問題,不過還是加了安全 wordDoc.Paragraphs.Last.Range.Font.Bold = 1; wordDoc.Paragraphs.Last.Range.Text = strContent; //寫入15號字型文字 strContent = "我這個文字的字號是15號,而且是宋體\n"; wordApp.Selection.EndKey(ref unite, ref Nothing); wordDoc.Paragraphs.Last.Range.Font.Size = 15; wordDoc.Paragraphs.Last.Range.Font.Name = "宋體"; wordDoc.Paragraphs.Last.Range.Text = strContent; //寫入斜體文字 strContent = "我是斜體字文字\n"; wordApp.Selection.EndKey(ref unite, ref Nothing); wordDoc.Paragraphs.Last.Range.Font.Italic = 1; wordDoc.Paragraphs.Last.Range.Text = strContent; //寫入藍色文字 strContent = "我是藍色的文字\n"; wordApp.Selection.EndKey(ref unite, ref Nothing); wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlue; wordDoc.Paragraphs.Last.Range.Text = strContent; //寫入下劃線文字 strContent = "我是下劃線文字\n"; wordApp.Selection.EndKey(ref unite, ref Nothing); wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineThick; wordDoc.Paragraphs.Last.Range.Text = strContent; //寫入紅色下畫線文字 strContent = "我是點線下劃線,並且下劃線是紅色的\n"; wordApp.Selection.EndKey(ref unite, ref Nothing); wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineDottedHeavy; wordDoc.Paragraphs.Last.Range.Font.UnderlineColor = MSWord.WdColor.wdColorRed; wordDoc.Paragraphs.Last.Range.Text = strContent; //取消下劃線,並且將字號調整為12號 strContent = "我他媽不要下劃線了,並且設定字號為12號,黑色不要斜體\n"; wordApp.Selection.EndKey(ref unite, ref Nothing); wordDoc.Paragraphs.Last.Range.Font.Size = 12; wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineNone; wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlack; wordDoc.Paragraphs.Last.Range.Font.Italic = 0; wordDoc.Paragraphs.Last.Range.Text = strContent; #endregion #region 新增表格、填充資料、設定表格行列寬高、合併單元格、新增表頭斜線、給單元格新增圖片 wordDoc.Content.InsertAfter("\n");//這一句與下一句的順序不能顛倒,原因還沒搞透 wordApp.Selection.EndKey(ref unite, ref Nothing); //將游標移動到文件末尾 wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft; //object WdLine2 = MSWord.WdUnits.wdLine;//換一行; //wordApp.Selection.MoveDown(ref WdLine2, 6, ref Nothing);//向下跨15行輸入表格,這樣表格就在文字下方了,不過這是非主流的方法 //設定表格的行數和列數 int tableRow = 6; int tableColumn = 6; //定義一個Word中的表格物件 MSWord.Table table = wordDoc.Tables.Add(wordApp.Selection.Range, tableRow, tableColumn, ref Nothing, ref Nothing); //預設建立的表格沒有邊框,這裡修改其屬性,使得建立的表格帶有邊框 table.Borders.Enable = 1;//這個值可以設定得很大,例如5、13等等 //表格的索引是從1開始的。 wordDoc.Tables[1].Cell(1, 1).Range.Text = "列\n行"; for (int i = 1; i < tableRow; i++) { for (int j = 1; j < tableColumn; j++) { if (i == 1) { table.Cell(i, j + 1).Range.Text = "Column " + j;//填充每列的標題 } if (j == 1) { table.Cell(i + 1, j).Range.Text = "Row " + i; //填充每行的標題 } table.Cell(i + 1, j + 1).Range.Text = i + "行 " + j + "列"; //填充表格的各個小格子 } } //新增行 table.Rows.Add(ref Nothing); table.Rows[tableRow + 1].Height = 35;//設定新增加的這行表格的高度 //向新新增的行的單元格中新增圖片 string FileName = Environment.CurrentDirectory + "\\6.jpg";//圖片所在路徑 object LinkToFile = false; object SaveWithDocument = true; object Anchor = table.Cell(tableRow + 1, tableColumn).Range;//選中要新增圖片的單元格 wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor); //由於是本文件的第2張圖,所以這裡是InlineShapes[2] wordDoc.Application.ActiveDocument.InlineShapes[1].Width = 50;//圖片寬度 wordDoc.Application.ActiveDocument.InlineShapes[1].Height = 35;//圖片高度 // 將圖片設定為四周環繞型 MSWord.Shape s = wordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape(); s.WrapFormat.Type = MSWord.WdWrapType.wdWrapSquare; //設定table樣式 table.Rows.HeightRule = MSWord.WdRowHeightRule.wdRowHeightAtLeast;//高度規則是:行高有最低值下限? table.Rows.Height = wordApp.CentimetersToPoints(float.Parse("0.8"));// table.Range.Font.Size = 10.5F; table.Range.Font.Bold = 0; table.Range.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;//表格文字居中 table.Range.Cells.VerticalAlignment = MSWord.WdCellVerticalAlignment.wdCellAlignVerticalBottom;//文字垂直貼到底部 //設定table邊框樣式 table.Borders.OutsideLineStyle = MSWord.WdLineStyle.wdLineStyleDouble;//表格外框是雙線 table.Borders.InsideLineStyle = MSWord.WdLineStyle.wdLineStyleSingle;//表格內框是單線 table.Rows[1].Range.Font.Bold = 1;//加粗 table.Rows[1].Range.Font.Size = 12F; table.Cell(1, 1).Range.Font.Size = 10.5F; wordApp.Selection.Cells.Height = 30;//所有單元格的高度 //除第一行外,其他行的行高都設定為20 for (int i = 2; i <= tableRow; i++) { table.Rows[i].Height = 20; } //將表格左上角的單元格里的文字(“行” 和 “列”)居右 table.Cell(1, 1).Range.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphRight; //將表格左上角的單元格里面下面的“列”字移到左邊,相比上一行就是將ParagraphFormat改成了Paragraphs[2].Format table.Cell(1, 1).Range.Paragraphs[2].Format.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft; table.Columns[1].Width = 50;//將第 1列寬度設定為50 //將其他列的寬度都設定為75 for (int i = 2; i <= tableColumn; i++) { table.Columns[i].Width = 75; } //新增表頭斜線,並設定表頭的樣式 table.Cell(1, 1).Borders[MSWord.WdBorderType.wdBorderDiagonalDown].Visible = true; table.Cell(1, 1).Borders[MSWord.WdBorderType.wdBorderDiagonalDown].Color = MSWord.WdColor.wdColorRed; table.Cell(1, 1).Borders[MSWord.WdBorderType.wdBorderDiagonalDown].LineWidth = MSWord.WdLineWidth.wdLineWidth150pt; //合併單元格 table.Cell(4, 4).Merge(table.Cell(4, 5));//橫向合併 table.Cell(2, 3).Merge(table.Cell(4, 3));//縱向合併,合併(2,3),(3,3),(4,3) #endregion #region 插入圖片、居中顯示,設定圖片的絕對尺寸和縮放尺寸,並給圖片新增標題 for (int i = 0; i < 2; i++) { wordApp.Selection.EndKey(ref unite, ref Nothing); //將游標移動到文件末尾 //圖片檔案的路徑 string filename = Environment.CurrentDirectory + "\\6.jpg"; //要向Word文件中插入圖片的位置 Object range = wordDoc.Paragraphs.Last.Range; //定義該插入的圖片是否為外部連結 Object linkToFile = false; //預設,這裡貌似設定為bool型別更清晰一些 //定義要插入的圖片是否隨Word文件一起儲存 Object saveWithDocument = true; //預設 //使用InlineShapes.AddPicture方法(【即“嵌入型”】)插入圖片 wordDoc.InlineShapes.AddPicture(filename, ref linkToFile, ref saveWithDocument, ref range); wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;//居中顯示圖片 //設定圖片寬高的絕對大小 //wordDoc.InlineShapes[1].Width = 200; //wordDoc.InlineShapes[1].Height = 150; //按比例縮放大小 wordDoc.InlineShapes[i+1].ScaleWidth = 20;//縮小到20% ? wordDoc.InlineShapes[i+1].ScaleHeight = 20; //在圖下方居中新增圖片標題 wordDoc.Content.InsertAfter("\n");//這一句與下一句的順序不能顛倒,原因還沒搞透 wordApp.Selection.EndKey(ref unite, ref Nothing); wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter; wordApp.Selection.Font.Size = 10;//字型大小 wordApp.Selection.TypeText("圖" + i + " 測試圖片\n"); } #endregion //儲存文件 wordDoc.Save(); wordDoc.Close(ref oMissing, ref oMissing, ref oMissing); wordApp.Quit(ref oMissing, ref oMissing, ref oMissing); MessageFilter.Revoke(); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } } private static void CreateFile(string filePath)//建立資料夾 { if (!File.Exists(filePath)) { using (FileStream fs = File.Create(filePath)) { } } } } }
效果圖