我要把一些数据导入到WORD模版里。需要16个表单。模版里我只创建了一个表单。表单里有书签,来用于填充。怎么才能实现16个表单呢?在线等

解决方案 »

  1.   

    这几天刚写的,希望能帮助你public class OperatorWord
        {
            object oMissing = System.Reflection.Missing.Value;
            /// <summary>
            /// 创建Word
            /// </summary>
            _Application oWord = null;
            _Document oDoc = null;        public OperatorWord()
            {
                oWord = new Word.Application();
                oWord.Visible = false;//Word是否可见
                oWord.NormalTemplate.Saved = true;//Normal.dot正由另一Word会话编辑,如果您用原名保存此文档,将会改写在其他会话中所做的任何更改。
            }
            /// <summary>
            /// 打开Word文档
            /// </summary>
            /// <param name="wordPath">Word路径</param>
            public void OpenWord(object wordPath)
            {
                oDoc = oWord.Documents.Open(ref wordPath,
                    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);
            }
            /// <summary>
            /// 导入Word文档模板
            /// </summary>
            public void TransWordModel(object wordPath)
            {
                oDoc = oWord.Documents.Add(ref wordPath, ref oMissing, ref oMissing, ref oMissing);
            }
            /// <summary>
            /// 创建Word表格
            /// </summary>
            /// <param name="x">起点横坐标</param>
            /// <param name="y">起点纵坐标</param>
            /// <param name="row">行数</param>
            /// <param name="col">列数</param>
            public void AddNewTable(int x,int y,int row,int col)
            {
                object start = x;
                object end = y;
                Word.Range tableLocation = oDoc.Range(ref start,ref end);
                oDoc.Tables.Add(tableLocation,row, col,ref oMissing,ref oMissing);
            }        /// <summary>
            /// 创建Word表格  集合的列与列标题的数目要一致
            /// </summary>
            /// <param name="dt">集合</param>
            /// <param name="strs">列标题</param>
            /// <param name="strBookMark">标签名</param>
            public void AddNewTable(DataTable dt, string[] strs,string strBookMark)
            {
                if (dt.Columns.Count != strs.Length) throw new Exception("集合的列与列标题的数目要一致");
                object bookMark = strBookMark;
                Word.Range tableRange = oDoc.Books.get_Item(ref bookMark).Range;
                //定位表格所在的区域
                Word.Range range;
                range = tableRange.Tables[1].Range;
                //写标题
                Word.Cell item;
                for (int iCol = 0; iCol < dt.Columns.Count; iCol++)
                {
                    item = range.Rows[1].Cells[1 + iCol];
                    item.Range.Text = strs[iCol];
                }            //写数据行
                for (int iRow = 0; iRow < dt.Rows.Count; iRow++)
                {
                    for (int iCol = 0; iCol < dt.Columns.Count; iCol++)
                    {
                        item = range.Rows[iRow+2].Cells[1 + iCol];
                        item.Range.Text = dt.Rows[iRow][iCol].ToString();
                    }
                }
            }        /// <summary>
            /// 创建Word表格
            /// </summary>
            /// <param name="dt">集合</param>
            /// <param name="rowIndex">行索引</param>
            /// <param name="columnIndex">列索引</param>
            /// <param name="strBookMark">标签名</param>
            public void AddNewTable(DataTable dt, int rowIndex, int columnIndex,string strBookMark)
            {
                if (dt.Columns.Count < columnIndex) throw new Exception("列索引越界");
                if (dt.Rows.Count < rowIndex) throw new Exception("行索引越界");
                object bookMark = strBookMark;
                Word.Range tableRange = oDoc.Books.get_Item(ref bookMark).Range;
                //定位表格所在的区域
                Word.Range range;
                range = tableRange.Tables[1].Range;
                Word.Cell item;
                //写数据行
                for (int iRow = 0, iRow2 = rowIndex; iRow < dt.Rows.Count; iRow++,iRow2++)
                {
                    item = range.Rows[iRow2].Cells[1 + columnIndex];
                    item.Range.Text = dt.Rows[iRow][columnIndex].ToString();
                }
            }        /// <summary>
            /// 添加新行
            /// </summary>
            public void AddNewRow()
            {
                object start = 0;
                object end = 0;
                Word.Range tableLocation = oDoc.Range(ref start,ref end);
                oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
                Word.Table newTable = oDoc.Tables[1];
                object beforeRow = newTable.Rows[1];
                newTable.Rows.Add(ref beforeRow);
            }
            /// <summary>
            /// 合并单元格
            /// </summary>
            public void UnitCell()
            {
                object start = 0;
                object end = 0;
                Word.Range tableLocation = oDoc.Range(ref start,ref end);
                oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
                Word.Table newTable = oDoc.Tables[1];
                object beforeRow = newTable.Rows[1];
                newTable.Rows.Add(ref beforeRow);
                Word.Cell cell = newTable.Cell(1, 1);
                cell.Merge(newTable.Cell(1, 2));
            }
            /// <summary>
            /// 拆分单元格
            /// </summary>
            public void SplitCell()
            {
                object start = 0;
                object end = 0;
                Word.Range tableLocation = oDoc.Range(ref start,ref end);
                oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
                Word.Table newTable = oDoc.Tables[1];
                object beforeRow = newTable.Rows[1];
                newTable.Rows.Add(ref beforeRow);
                Word.Cell cell = newTable.Cell(1, 1);
                cell.Merge(newTable.Cell(1, 2));
                object rowNum = 2;
                object colNum = 2;
                cell.Split(ref rowNum, ref colNum);
            }
            /// <summary>
            /// 添加段落
            /// </summary>
            public void AddParagraph()
            {
                Word.Paragraph oPara1=null;
                oPara1 = oDoc.Paragraphs.Add(ref oMissing);
                oPara1.Range.Text = "Header 1";
                oPara1.Range.Font.Bold = 1;
                oPara1.Format.SpaceAfter = 24; //24pt
                oPara1.Range.InsertParagraphAfter();
            }
            /// <summary>
            /// 另存为
            /// </summary>
            /// <param name="wordPath">路径及文件名</param>
            public void SaveAsWord(object wordPath)
            {
                if (oDoc == null) return;
                oDoc.SaveAs(ref wordPath,
                    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);
            }
            /// <summary>
            /// 保存
            /// </summary>
            public void SaveWord()
            {
                if (oDoc == null) return;
                oDoc.Save();
            }
            /// <summary>
            /// 关闭Word
            /// </summary>
            public void CloseWord()
            {
                oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
            }
            /// <summary>
            /// 杀死进程
            /// </summary>
            /// <param name="processName"></param>
            public void SkillProcess(string processName)
            {
                System.Diagnostics.Process[] myPs = null;
                myPs = System.Diagnostics.Process.GetProcesses();
                foreach (System.Diagnostics.Process p in myPs)
                {
                    if (p.Id != 0)
                    {
                        StringBuilder myS = new StringBuilder();
                        myS.Append(processName + p.ProcessName + "ID:" + p.Id.ToString());
                        try
                        {
                            if (p.Modules != null)
                            {
                                if (p.Modules.Count > 0)
                                {
                                    System.Diagnostics.ProcessModule pm = p.Modules[0];
                                    myS.Append("\n Modules[0].FileName:" + pm.FileName);
                                    myS.Append("\n Modules[0].ModuleName:" + pm.ModuleName);
                                    myS.Append("\n Modules[0].FileVersionInfo:\n" + pm.FileVersionInfo.ToString());
                                    if (pm.ModuleName.ToLower() == processName.ToLower())
                                    {
                                        p.Kill();
                                    }
                                    Console.WriteLine(myS.ToString());
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(myS.ToString());
                            Console.WriteLine(e.Message);
                        }
                        finally
                        { }
                    }
                }
            }
            /// <summary>
            /// 填充文本标签
            /// </summary>
            public void FillBookMarks(string[]Keys,string[]Values)
            {
                Word.Books odf = oDoc.Books;
                
                for (int i = 0; i < Keys.Length; i++)
                {
                    object key=Keys[i];
                    oDoc.Books.get_Item(ref key).Range.Text = Values[i];
                }
            }
        }