关于几个VSTO操作

几个今天找了下蛮有用的操作:

1.

WordApp.Selection.WholeStory()
WordApp.Selection.Copy()
Dim newDoc As New Word.Document
newDoc.Activate()
WordApp.Selection.Paste()
WordApp.ActiveDocument.SaveAs(sTempDocumentFile)

WordApp.ActiveDocument.Close(Word.WdSaveOptions.wd DoNotSaveChanges)
WordDoc.Close()

 

2.

  http://blog.csdn.net/mengyao/archive/2007/09/13/1784079.aspx

 

using Word;
下面的例子中包括C#对Word文档的创建、插入表格、设置样式等操作:

(例子中代码有些涉及数据信息部分被省略,重要是介绍一些C#操作word文档的方法)

        public string CreateWordFile(string CheckedInfo)
        ...{
            string message = "";
            try
            ...{
                Object Nothing = System.Reflection.Missing.Value;
                Directory.CreateDirectory("C:/CNSI");  //创建文件所在目录
                string name = "CNSI_" + DateTime.Now.ToShortString()+".doc";
                object filename = "C://CNSI//" + name;  //文件保存路径
                //创建Word文档
                Word.Application WordApp = new Word.ApplicationClass();
                Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);

                //添加页眉
                WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
                WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
                WordApp.ActiveWindow.ActivePane.Selection.InsertAfter("[页眉内容]");
                WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;//设置右对齐
                WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//跳出页眉设置

                WordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距

                //移动焦点并换行
                object count = 14;
                object WdLine = Word.WdUnits.wdLine;//换一行;
                 WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
                 WordApp.Selection.TypeParagraph();//插入段落

                 //文档中创建表格
                 Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing);
                 //设置表格样式
                 newTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleThickThinLargeGap;
                 newTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
                 newTable.Columns[1].Width = 100f;
                 newTable.Columns[2].Width = 220f;
                 newTable.Columns[3].Width = 105f;

                 //填充表格内容
                 newTable.Cell(1, 1).Range.Text = "产品详细信息表";
                 newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体
                 //合并单元格
                 newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
                 WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中
                 WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;//水平居中
                        
                 //填充表格内容
                 newTable.Cell(2, 1).Range.Text = "产品基本信息";
                 newTable.Cell(2, 1).Range.Font.Color = Word.WdColor.wdColorDarkBlue;//设置单元格内字体颜色
                 //合并单元格
                 newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));
                 WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

                  //填充表格内容
                  newTable.Cell(3, 1).Range.Text = "品牌名称:";
                  newTable.Cell(3, 2).Range.Text = BrandName;
                  //纵向合并单元格
                  newTable.Cell(3, 3).Select();//选中一行
                  object moveUnit = Word.WdUnits.wdLine;
                  object moveCount = 5;
                  object moveExtend = Word.WdMovementType.wdExtend;
                   WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
                   WordApp.Selection.Cells.Merge();
                   //插入图片
                   string FileName = Picture;//图片所在路径
                   object LinkToFile = false;
                   object SaveWithDocument = true;
                   object Anchor = WordDoc.Application.Selection.Range;
                   WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);
                    WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 100f;//图片宽度
                    WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 100f;//图片高度
                    //将图片设置为四周环绕型
                    Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
                    s.WrapFormat.Type = Word.WdWrapType.wdWrapSquare;
                        
                    newTable.Cell(12, 1).Range.Text = "产品特殊属性";
                    newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));
                     //在表格中增加行
                     WordDoc.Content.Tables[1].Rows.Add(ref Nothing);
                      
                     WordDoc.Paragraphs.Last.Range.Text = "文档创建时间:" + DateTime.Now.ToString();//“落款”
                     WordDoc.Paragraphs.Last.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

                    //文件保存
                    WordDoc.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);
                    WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
                    WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
                    message=name+"文档生成成功,以保存到C:CNSI下";
            }
            catch
            ...{
                message = "文件导出异常!";
            }
            return message;
        }

 

 

3.

  http://webservices.ctocio.com.cn/259/11497759_2.shtml

以下是代码片段:
 #endregion
  ///
  /// 文档的"页面设置"属性
  ///
  public void SetPageStyle()
  {
  _wordApplication.ActiveDocument.PageSetup.LineNumbering.Active = 0;//行编号
  _wordApplication.ActiveDocument.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait;//页面方向
  _wordApplication.ActiveDocument.PageSetup.TopMargin = _wordApplication.CentimetersToPoints(float.Parse("2.54"));//上页边距
  _wordApplication.ActiveDocument.PageSetup.BottomMargin = _wordApplication.CentimetersToPoints(float.Parse("2.54"));//下页边距
  _wordApplication.ActiveDocument.PageSetup.LeftMargin = _wordApplication.CentimetersToPoints(float.Parse("3.17"));//左页边距
  _wordApplication.ActiveDocument.PageSetup.RightMargin = _wordApplication.CentimetersToPoints(float.Parse("3.17"));//右页边距
  _wordApplication.ActiveDocument.PageSetup.Gutter = _wordApplication.CentimetersToPoints(float.Parse("0"));//装订线位置
  _wordApplication.ActiveDocument.PageSetup.HeaderDistance = _wordApplication.CentimetersToPoints(float.Parse("1.5"));//页眉
  _wordApplication.ActiveDocument.PageSetup.FooterDistance = _wordApplication.CentimetersToPoints(float.Parse("1.75"));//页脚
  _wordApplication.ActiveDocument.PageSetup.PageWidth = _wordApplication.CentimetersToPoints(float.Parse("21"));//纸张宽度
  _wordApplication.ActiveDocument.PageSetup.PageHeight = _wordApplication.CentimetersToPoints(float.Parse("29.7"));//纸张高度
  _wordApplication.ActiveDocument.PageSetup.FirstPageTray = Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin;//纸张来源
  _wordApplication.ActiveDocument.PageSetup.OtherPagesTray = Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin;//纸张来源
  _wordApplication.ActiveDocument.PageSetup.SectionStart = Microsoft.Office.Interop.Word.WdSectionStart.wdSectionNewPage;//节的起始位置:新建页
  _wordApplication.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = 0;//页眉页脚-奇偶页不同
  _wordApplication.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = 0;//页眉页脚-首页不同
  _wordApplication.ActiveDocument.PageSetup.VerticalAlignment = Microsoft.Office.Interop.Word.WdVerticalAlignment.wdAlignVerticalTop;//页面垂直对齐方式
  _wordApplication.ActiveDocument.PageSetup.SuppressEndnotes = 0;//不隐藏尾注
  _wordApplication.ActiveDocument.PageSetup.MirrorMargins = 0;//不设置首页的内外边距
  _wordApplication.ActiveDocument.PageSetup.TwoPagesOnOne = false;//不双面打印
  _wordApplication.ActiveDocument.PageSetup.BookFoldPrinting = false;//不设置手动双面正面打印
  _wordApplication.ActiveDocument.PageSetup.BookFoldRevPrinting = false;//不设置手动双面背面打印
  _wordApplication.ActiveDocument.PageSetup.BookFoldPrintingSheets = 1;//打印默认份数
  _wordApplication.ActiveDocument.PageSetup.GutterPos = Microsoft.Office.Interop.Word.WdGutterStyle.wdGutterPosLeft;//装订线位于左侧
  _wordApplication.ActiveDocument.PageSetup.LinesPage = 40;//默认页行数量
  _wordApplication.ActiveDocument.PageSetup.LayoutMode = Microsoft.Office.Interop.Word.WdLayoutMode.wdLayoutModeLineGrid;//版式模式为 “只指定行网格”
  }
  ///
  /// 添加文字
  ///
  ///
   public void AddText(string text, int pFontSize, Microsoft.Office.Interop.Word.WdColor pFontColor, int pFontBold, Microsoft.Office.Interop.Word.WdParagraphAlignment ptextAlignment, string fontName)
  {
  //加粗
  if (pFontBold >= 1)
  {
  _wordApplication.Selection.Font.Bold = 1;
  }
  else
  {
  _wordApplication.Selection.Font.Bold = 0;
  }
  //对齐方式
  _wordApplication.Selection.ParagraphFormat.Alignment = ptextAlignment;
  //文字大小
  _wordApplication.Selection.Font.Size = (float)pFontSize;
  //文字字体
  _wordApplication.Selection.Font.Name = fontName;
  //文字颜色
  _wordApplication.Selection.Font.Color = pFontColor;
  //还有很多,可以根据vs的智能提示慢慢看
  _wordApplication.Selection.TypeText(text);
  }
  ///
  /// 添加文字
  ///
  ///
  public void AddText(string text, bool isNewLine)
  {
  if (isNewLine)
  {
  text += "\r\n";
  }
  _wordApplication.Selection.TypeText(text);
  }
  ///
  /// 添加超链
  ///
  ///
  ///
  public void AddLink(string url, string text)
  {
  object objtext = text;
  object refstring = (object)url;
   _wordApplication.ActiveDocument.Hyperlinks.Add(_wordApplication.Selection.Range, ref refstring, ref objtext, ref objtext, ref objtext, ref objtext);
  }
  ///
  /// 添加图片
  ///
  ///
  public void AddPrice(string pic, Microsoft.Office.Interop.Word.WdParagraphAlignment align)
  {
  _wordApplication.Selection.ParagraphFormat.Alignment = align;
  _wordApplication.Selection.InlineShapes.AddPicture(pic, ref missing, ref missing, ref missing);
  }
  ///
  /// 移动光标
  ///
  ///
  public void MoveDown(int count)
  {
  object objCount = count;
  _wordApplication.Selection.MoveDown(ref missing, ref objCount, ref missing);
  }
  ///
  /// 添加表格
  ///
  public void AddTable()
  {
  _wordApplication.ActiveDocument.Tables.Add(_wordApplication.Selection.Range, 2, 2, ref missing, ref missing);
  _wordApplication.Selection.TypeText("aaaaaa");
  object objCount = 1;
  _wordApplication.Selection.MoveRight(ref missing, ref objCount, ref missing);
  _wordApplication.Selection.TypeText("bbbb");
  MoveDown(2);
  }
  ///
  /// 添加标签
  ///
  ///
  public void AddBookMark(string bookMark)
  {
  Microsoft.Office.Interop.Word.Range rng = _wordDocument.Content;
  int lenght = _wordDocument.Characters.Count - 1;
  object start = lenght;
  object end = lenght;
  rng = _wordDocument.Range(ref start, ref end);
  object range = rng;
  _wordDocument.Bookmarks.Add(bookMark, ref range);
  }
  ///
  /// 定位到书签
  ///
  ///
  public void GotoBookMark(string strBookMarkName)
  {
  object Bookmark = (int)Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
  object NameBookMark = strBookMarkName;
  _wordApplication.Selection.GoTo(ref Bookmark, ref missing, ref missing, ref NameBookMark);
  }
  ///
  /// 换行
  ///
  public void NewLine()
  {
  _wordApplication.Selection.TypeParagraph();
  }
  ///
  /// 插入分页符
  ///
  public void NewPage()
  {
  Microsoft.Office.Interop.Word.Paragraph para;
  para = _wordDocument.Content.Paragraphs.Add(ref missing);
  object pBreak = (int)WdBreakType.wdSectionBreakNextPage;
  para.Range.InsertBreak(ref pBreak);
  }
  ///
  /// 释放对象
  ///
  public void Close()
  {
  _wordDocument.Close(ref missing, ref missing, ref missing);
  }
  ///
  /// 插入图形
  ///
  /// 接下的内容是否要显示在绘图中
  public void AddShape()
  {
  _wordApplication.ActiveDocument.Shapes.AddShape(1, 70, 170, 140, 120, ref missing).Select(ref missing);
  _wordApplication.Selection.ShapeRange.Fill.ForeColor.RGB = 2551530;//填充颜色
  _wordApplication.Selection.ShapeRange.Line.ForeColor.RGB = 153510;//边框颜色
  _wordApplication.Selection.ShapeRange.TextFrame.TextRange.Select();
  }
  }

  注意:如果是插入绘图的话,可以在绘图之前,先插入一个标签AddBookMark(),然后画完图之后再定位到之前插入的标签那里GotoBookMark(),继续写入你需要的内容.当然,你有更好的方法可以和我分享.

  其实做到后面,发现根本不用怎么在网上找代码的,只需要使用word里面的宏,录制你要生成的一些操作,然后再查看宏的代码,里面就会自动帮你生成VB代码,根据这些VB代码转换成相应的C#代码,相信应该不是什么难事吧!

以下是代码片段:
 #endregion
  ///
  /// 文档的"页面设置"属性
  ///
  public void SetPageStyle()
  {
  _wordApplication.ActiveDocument.PageSetup.LineNumbering.Active = 0;//行编号
  _wordApplication.ActiveDocument.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait;//页面方向
  _wordApplication.ActiveDocument.PageSetup.TopMargin = _wordApplication.CentimetersToPoints(float.Parse("2.54"));//上页边距
  _wordApplication.ActiveDocument.PageSetup.BottomMargin = _wordApplication.CentimetersToPoints(float.Parse("2.54"));//下页边距
  _wordApplication.ActiveDocument.PageSetup.LeftMargin = _wordApplication.CentimetersToPoints(float.Parse("3.17"));//左页边距
  _wordApplication.ActiveDocument.PageSetup.RightMargin = _wordApplication.CentimetersToPoints(float.Parse("3.17"));//右页边距
  _wordApplication.ActiveDocument.PageSetup.Gutter = _wordApplication.CentimetersToPoints(float.Parse("0"));//装订线位置
  _wordApplication.ActiveDocument.PageSetup.HeaderDistance = _wordApplication.CentimetersToPoints(float.Parse("1.5"));//页眉
  _wordApplication.ActiveDocument.PageSetup.FooterDistance = _wordApplication.CentimetersToPoints(float.Parse("1.75"));//页脚
  _wordApplication.ActiveDocument.PageSetup.PageWidth = _wordApplication.CentimetersToPoints(float.Parse("21"));//纸张宽度
  _wordApplication.ActiveDocument.PageSetup.PageHeight = _wordApplication.CentimetersToPoints(float.Parse("29.7"));//纸张高度
   _wordApplication.ActiveDocument.PageSetup.FirstPageTray = Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin;//纸张来源
   _wordApplication.ActiveDocument.PageSetup.OtherPagesTray = Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin;//纸张来源
   _wordApplication.ActiveDocument.PageSetup.SectionStart = Microsoft.Office.Interop.Word.WdSectionStart.wdSectionNewPage;//节的起始位置:新 建页
  _wordApplication.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = 0;//页眉页脚-奇偶页不同
  _wordApplication.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = 0;//页眉页脚-首页不同
   _wordApplication.ActiveDocument.PageSetup.VerticalAlignment = Microsoft.Office.Interop.Word.WdVerticalAlignment.wdAlignVerticalTop;//页 面垂直对齐方式
  _wordApplication.ActiveDocument.PageSetup.SuppressEndnotes = 0;//不隐藏尾注
  _wordApplication.ActiveDocument.PageSetup.MirrorMargins = 0;//不设置首页的内外边距
  _wordApplication.ActiveDocument.PageSetup.TwoPagesOnOne = false;//不双面打印
  _wordApplication.ActiveDocument.PageSetup.BookFoldPrinting = false;//不设置手动双面正面打印
  _wordApplication.ActiveDocument.PageSetup.BookFoldRevPrinting = false;//不设置手动双面背面打印
  _wordApplication.ActiveDocument.PageSetup.BookFoldPrintingSheets = 1;//打印默认份数
  _wordApplication.ActiveDocument.PageSetup.GutterPos = Microsoft.Office.Interop.Word.WdGutterStyle.wdGutterPosLeft;//装订线位于左侧
  _wordApplication.ActiveDocument.PageSetup.LinesPage = 40;//默认页行数量
   _wordApplication.ActiveDocument.PageSetup.LayoutMode = Microsoft.Office.Interop.Word.WdLayoutMode.wdLayoutModeLineGrid;//版式模式为 “只指定行网格”
  }
  ///
  /// 添加文字
  ///
  ///
   public void AddText(string text, int pFontSize, Microsoft.Office.Interop.Word.WdColor pFontColor, int pFontBold, Microsoft.Office.Interop.Word.WdParagraphAlignment ptextAlignment, string fontName)
  {
  //加粗
  if (pFontBold >= 1)
  {
  _wordApplication.Selection.Font.Bold = 1;
  }
  else
  {
  _wordApplication.Selection.Font.Bold = 0;
  }
  //对齐方式
  _wordApplication.Selection.ParagraphFormat.Alignment = ptextAlignment;
  //文字大小
  _wordApplication.Selection.Font.Size = (float)pFontSize;
  //文字字体
  _wordApplication.Selection.Font.Name = fontName;
  //文字颜色
  _wordApplication.Selection.Font.Color = pFontColor;
  //还有很多,可以根据vs的智能提示慢慢看
  _wordApplication.Selection.TypeText(text);
  }
  ///
  /// 添加文字
  ///
  ///
  public void AddText(string text, bool isNewLine)
  {
  if (isNewLine)
  {
  text += "\r\n";
  }
  _wordApplication.Selection.TypeText(text);
  }
  ///
  /// 添加超链
  ///
  ///
  ///
  public void AddLink(string url, string text)
  {
  object objtext = text;
  object refstring = (object)url;
    _wordApplication.ActiveDocument.Hyperlinks.Add(_wordApplication.Selection.Range, ref refstring, ref objtext, ref objtext, ref objtext, ref objtext);
  }
  ///
  /// 添加图片
  ///
  ///
  public void AddPrice(string pic, Microsoft.Office.Interop.Word.WdParagraphAlignment align)
  {
  _wordApplication.Selection.ParagraphFormat.Alignment = align;
  _wordApplication.Selection.InlineShapes.AddPicture(pic, ref missing, ref missing, ref missing);
  }
  ///
  /// 移动光标
  ///
  ///
  public void MoveDown(int count)
  {
  object objCount = count;
  _wordApplication.Selection.MoveDown(ref missing, ref objCount, ref missing);
  }
  ///
  /// 添加表格
  ///
  public void AddTable()
  {
  _wordApplication.ActiveDocument.Tables.Add(_wordApplication.Selection.Range, 2, 2, ref missing, ref missing);
  _wordApplication.Selection.TypeText("aaaaaa");
  object objCount = 1;
  _wordApplication.Selection.MoveRight(ref missing, ref objCount, ref missing);
  _wordApplication.Selection.TypeText("bbbb");
  MoveDown(2);
  }
  ///
  /// 添加标签
  ///
  ///
  public void AddBookMark(string bookMark)
  {
  Microsoft.Office.Interop.Word.Range rng = _wordDocument.Content;
  int lenght = _wordDocument.Characters.Count - 1;
  object start = lenght;
  object end = lenght;
  rng = _wordDocument.Range(ref start, ref end);
  object range = rng;
  _wordDocument.Bookmarks.Add(bookMark, ref range);
  }
  ///
  /// 定位到书签
  ///
  ///
  public void GotoBookMark(string strBookMarkName)
  {
  object Bookmark = (int)Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
  object NameBookMark = strBookMarkName;
  _wordApplication.Selection.GoTo(ref Bookmark, ref missing, ref missing, ref NameBookMark);
  }
  ///
  /// 换行
  ///
  public void NewLine()
  {
  _wordApplication.Selection.TypeParagraph();
  }
  ///
  /// 插入分页符
  ///
  public void NewPage()
  {
  Microsoft.Office.Interop.Word.Paragraph para;
  para = _wordDocument.Content.Paragraphs.Add(ref missing);
  object pBreak = (int)WdBreakType.wdSectionBreakNextPage;
  para.Range.InsertBreak(ref pBreak);
  }
  ///
  /// 释放对象
  ///
  public void Close()
  {
  _wordDocument.Close(ref missing, ref missing, ref missing);
  }
  ///
  /// 插入图形
  ///
  /// 接下的内容是否要显示在绘图中
  public void AddShape()
  {
  _wordApplication.ActiveDocument.Shapes.AddShape(1, 70, 170, 140, 120, ref missing).Select(ref missing);
  _wordApplication.Selection.ShapeRange.Fill.ForeColor.RGB = 2551530;//填充颜色
  _wordApplication.Selection.ShapeRange.Line.ForeColor.RGB = 153510;//边框颜色
  _wordApplication.Selection.ShapeRange.TextFrame.TextRange.Select();
  }
  }

  注意:如果是插入绘图的话,可以在绘图之前,先插入一个标签AddBookMark(),然后画完图之后再定位到之前插入的标签那里GotoBookMark(),继续写入你需要的内容.当然,你有更好的方法可以和我分享.

  其实做到后面,发现根本不用怎么在网上找代码的,只需要使用word里面的宏,录制你要生成的一些操作,然后再查看宏的代码,里面就会自动帮你生成VB代码,根据这些VB代码转换成相应的C#代码,相信应该不是什么难事吧!

posted @ 2010-12-29 16:33  lavandachen  阅读(2996)  评论(0编辑  收藏  举报