1. 程式人生 > 其它 >NET Core匯出word文件(基本包含word中所有的設定)

NET Core匯出word文件(基本包含word中所有的設定)

下載需要的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(ref
fileName, 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)) { } } } } }

效果圖