黄聪:C#编写的Word操作类,有换页,添加表格,文本功能
生活随笔
收集整理的這篇文章主要介紹了
黄聪:C#编写的Word操作类,有换页,添加表格,文本功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近要幫老師做個工資管理系統(tǒng),需要自動生成Word.
就上網(wǎng)找了個Word操作類,再做了點修改,下面公布一下自己的代碼:
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Word;
using System.Windows.Forms;
/************************************************************************************************************************************
* * 文件名 :
* * 聲明 :
* * 創(chuàng)建者 : 黃聰
* * 創(chuàng)建日期 : 2009.10.8
* * 修改者 : 黃聰
* * 最新修改日期 : 2009.10.8
************************************************************************************************************************************/
namespace Tool
{
/********************************************************************************************************************************
* * 類名 : WordPlayer
* * 聲明 :
* * 創(chuàng)建者 : 黃聰
* * 創(chuàng)建日期 : 2009.7.15
* * 修改者 : 黃聰
* * 最新修改日期 : 2009.7.15
********************************************************************************************************************************/
public class WordPlayer
{
#region - 屬性 -
private static Microsoft.Office.Interop.Word._Application oWord = null;
private static Microsoft.Office.Interop.Word._Document odoc = null;
private static Microsoft.Office.Interop.Word._Document oDoc
{
get
{
if (odoc == null)
{
odoc = oWord.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
}
return odoc;
}
set
{
if (value != null)
{
odoc = value;
}
}
}
private static object Nothing = System.Reflection.Missing.Value;
public enum Orientation
{
橫板,
豎板
}
public enum Alignment
{
左對齊,
居中,
右對齊
}
#endregion
#region - 添加文檔 -
#region - 創(chuàng)建并打開一個空的word文檔進行編輯 -
public static void OpenNewWordFileToEdit()
{
oDoc = oWord.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
}
#endregion
#endregion
#region - 創(chuàng)建新Word -
public static bool CreateWord(bool isVisible)
{
try
{
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = isVisible;
return true;
}
catch (Exception)
{
return false;
}
}
public static bool CreateWord()
{
return CreateWord(false);
}
#endregion
#region - 打開文檔 -
public static bool Open(string filePath, bool isVisible)
{
try
{
oWord.Visible = isVisible;
object path = filePath;
oDoc = oWord.Documents.Open(ref path,
ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing,
ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing,
ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region - 插入表格 -
public static bool InsertTable(DataTable dt, bool haveBorder, double[] colWidths)
{
try
{
object Nothing = System.Reflection.Missing.Value;
int lenght = oDoc.Characters.Count - 1;
object start = lenght;
object end = lenght;
//表格起始坐標
Microsoft.Office.Interop.Word.Range tableLocation = oDoc.Range(ref start, ref end);
//添加Word表格
Microsoft.Office.Interop.Word.Table table = oDoc.Tables.Add(tableLocation, dt.Rows.Count, dt.Columns.Count, ref Nothing, ref Nothing);
if (colWidths != null)
{
for (int i = 0; i < colWidths.Length; i++)
{
table.Columns[i + 1].Width = (float)(28.5F * colWidths[i]);
}
}
///設置TABLE的樣式
table.Rows.HeightRule = Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightAtLeast;
table.Rows.Height = oWord.CentimetersToPoints(float.Parse("0.8"));
table.Range.Font.Size = 10.5F;
table.Range.Font.Name = "宋體";
table.Range.Font.Bold = 0;
table.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
table.Range.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
if (haveBorder == true)
{
//設置外框樣式
table.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
table.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
//樣式設置結束
}
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
table.Cell(row + 1, col + 1).Range.Text = dt.Rows[row][col].ToString();
}
}
return true;
}
catch (Exception e)
{
MessageBox.Show(e.ToString(), "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
finally
{
}
}
public static bool InsertTable(DataTable dt, bool haveBorder)
{
return InsertTable(dt, haveBorder, null);
}
public static bool InsertTable(DataTable dt)
{
return InsertTable(dt, false, null);
}
#endregion
#region - 插入文本 -
public static bool InsertText(string strText, System.Drawing.Font font, Alignment alignment, bool isAftre)
{
try
{
Word.Range rng = oDoc.Content;
int lenght = oDoc.Characters.Count - 1;
object start = lenght;
object end = lenght;
rng = oDoc.Range(ref start, ref end);
if (isAftre == true)
{
strText += "\r\n";
}
rng.Text = strText;
rng.Font.Name = font.Name;
rng.Font.Size = font.Size;
if (font.Style == FontStyle.Bold) { rng.Font.Bold = 1; } //設置單元格中字體為粗體
SetAlignment(rng, alignment);
return true;
}
catch (Exception)
{
return false;
}
}
public static bool InsertText(string strText)
{
return InsertText(strText, new System.Drawing.Font("宋體", 10.5F, FontStyle.Bold), Alignment.左對齊, false);
}
#endregion
#region - 設置對齊方式 -
private static Microsoft.Office.Interop.Word.WdParagraphAlignment SetAlignment(Range rng, Alignment alignment)
{
rng.ParagraphFormat.Alignment = SetAlignment(alignment);
return SetAlignment(alignment);
}
private static Microsoft.Office.Interop.Word.WdParagraphAlignment SetAlignment(Alignment alignment)
{
if (alignment == Alignment.居中)
{
return Word.WdParagraphAlignment.wdAlignParagraphCenter;
}
else if (alignment == Alignment.左對齊)
{
return Word.WdParagraphAlignment.wdAlignParagraphLeft;
}
else
{ return Word.WdParagraphAlignment.wdAlignParagraphRight; }
}
#endregion
#region - 頁面設置 -
public static void SetPage(Orientation orientation, double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin)
{
oDoc.PageSetup.PageWidth = oWord.CentimetersToPoints((float)width);
oDoc.PageSetup.PageHeight = oWord.CentimetersToPoints((float)height);
if (orientation == Orientation.橫板)
{
oDoc.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape;
}
oDoc.PageSetup.TopMargin = (float)(topMargin * 25);//上邊距
oDoc.PageSetup.LeftMargin = (float)(leftMargin * 25);//左邊距
oDoc.PageSetup.RightMargin = (float)(rightMargin * 25);//右邊距
oDoc.PageSetup.BottomMargin = (float)(bottomMargin * 25);//下邊距
}
public static void SetPage(Orientation orientation, double topMargin, double leftMargin, double rightMargin, double bottomMargin)
{
SetPage(orientation, 21, 29.7, topMargin, leftMargin, rightMargin, bottomMargin);
}
public static void SetPage(double topMargin, double leftMargin, double rightMargin, double bottomMargin)
{
SetPage(Orientation.豎板, 21, 29.7, topMargin, leftMargin, rightMargin, bottomMargin);
}
#endregion
#region - 插入分頁符 -
public static void InsertBreak()
{
Word.Paragraph para;
para = oDoc.Content.Paragraphs.Add(ref Nothing);
object pBreak = (int)WdBreakType.wdSectionBreakNextPage;
para.Range.InsertBreak(ref pBreak);
}
#endregion
#region - 關閉當前文檔 -
public static bool CloseDocument()
{
try
{
object doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
oDoc.Close(ref doNotSaveChanges, ref Nothing, ref Nothing);
oDoc = null;
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region - 關閉程序 -
public static bool Quit()
{
try
{
object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
oWord.Quit(ref saveOption, ref Nothing, ref Nothing);
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region - 保存文檔 -
public static bool Save(string savePath)
{
return Save(savePath, false);
}
public static bool Save(string savePath, bool isClose)
{
try
{
object fileName = savePath;
oDoc.SaveAs(ref fileName, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
if (isClose)
{
return CloseDocument();
}
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region - 插入頁腳 -
public static bool InsertPageFooter(string text, System.Drawing.Font font, WordPlayer.Alignment alignment)
{
try
{
oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekCurrentPageFooter;//頁腳
oWord.Selection.InsertAfter(text);
GetWordFont(oWord.Selection.Font, font);
SetAlignment(oWord.Selection.Range, alignment);
return true;
}
catch (Exception)
{
return false;
}
}
public static bool InsertPageFooterNumber(System.Drawing.Font font, WordPlayer.Alignment alignment)
{
try
{
oWord.ActiveWindow.View.SeekView = WdSeekView.wdSeekCurrentPageHeader;
oWord.Selection.WholeStory();
oWord.Selection.ParagraphFormat.Borders[WdBorderType.wdBorderBottom].LineStyle = WdLineStyle.wdLineStyleNone;
oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekMainDocument;
oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekCurrentPageFooter;//頁腳
oWord.Selection.TypeText("第");
object page = WdFieldType.wdFieldPage;
oWord.Selection.Fields.Add(oWord.Selection.Range, ref page, ref Nothing, ref Nothing);
oWord.Selection.TypeText("頁/共");
object pages = WdFieldType.wdFieldNumPages;
oWord.Selection.Fields.Add(oWord.Selection.Range, ref pages, ref Nothing, ref Nothing);
oWord.Selection.TypeText("頁");
GetWordFont(oWord.Selection.Font, font);
SetAlignment(oWord.Selection.Range, alignment);
oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekMainDocument;
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region - 字體格式設定 -
public static void GetWordFont(Microsoft.Office.Interop.Word.Font wordFont, System.Drawing.Font font)
{
wordFont.Name = font.Name;
wordFont.Size = font.Size;
if (font.Bold) { wordFont.Bold = 1; }
if (font.Italic) { wordFont.Italic = 1; }
if (font.Underline == true)
{
wordFont.Underline = Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineNone;
}
wordFont.UnderlineColor = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;
if (font.Strikeout)
{
wordFont.StrikeThrough = 1;//刪除線
}
}
#endregion
#region - 獲取Word中的顏色 -
public static WdColor GetWordColor(Color c)
{
UInt32 R = 0x1, G = 0x100, B = 0x10000;
return (Microsoft.Office.Interop.Word.WdColor)(R * c.R + G * c.G + B * c.B);
}
#endregion
}
}
新建一個窗體工程,拖入一個按鈕,復制下面代碼進去,按F5運行
private void button2_Click(object sender, EventArgs e){
if (WordPlayer.CreateWord() == false)
{
MessageBox.Show("文件創(chuàng)造失敗.", "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DataTable storedt = new DataTable();
storedt.Columns.Add("Book_ISBN");
storedt.Columns.Add("Book_Name");
storedt.Columns.Add("Store_Num");
storedt.Columns.Add("CanBorrow_Num");
storedt.Columns.Add("InShop_Num");
storedt.Columns.Add("OutShop_Num");
storedt.Rows.Add("1", "1", "1", "1", "1", "1");
storedt.Rows.Add("2", "2", "2", "2", "2", "2");
storedt.Rows.Add("3", "3", "3", "3", "3", "3");
storedt.Rows.Add("4", "4", "4", "4", "4", "4");
storedt.Rows.Add("5", "5", "5", "5", "5", "5");
storedt.Rows.Add("6", "6", "6", "6", "6", "6");
WordPlayer.SetPage(WordPlayer.Orientation.橫板, 18.4, 26, 3, 2.4, 1.87, 2.1);
WordPlayer.InsertText("工 資 變 動 情 況 審 批 表", new Font("微軟雅黑", 14, FontStyle.Bold), WordPlayer.Alignment.居中, true);
WordPlayer.InsertText("", new Font("微軟雅黑", 14, FontStyle.Bold), WordPlayer.Alignment.居中, true);
WordPlayer.InsertText("姓名:A 審批單位:廣西師范大學",
new Font("宋體", 12, FontStyle.Regular), WordPlayer.Alignment.左對齊, false);
WordPlayer.InsertTable(storedt, true);
WordPlayer.InsertText("制表時間:2007年1月15日", new Font("宋體", 12, FontStyle.Regular), WordPlayer.Alignment.右對齊, false);
WordPlayer.Save(Application.StartupPath + "\\test.doc",true);
}
最后效果如下:
轉載于:https://www.cnblogs.com/huangcong/archive/2010/03/27/1698486.html
總結
以上是生活随笔為你收集整理的黄聪:C#编写的Word操作类,有换页,添加表格,文本功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:Oracle SQL 内置函数大全
- 下一篇: 可怕又可笑的看病经历