精华内容
下载资源
问答
  • 原地址: ...Word打印”对话框的“页面范围”部分可让您仅打印所需的页面。例如,如果您需要打印100页文档的第1,10和100页,则在

    原地址: http://www.techrepublic.com/blog/microsoft-office/how-to-tell-word-to-print-selected-pages-from-different-sections-of-a-document/

    Word“打印”对话框的“页面范围”部分可让您仅打印所需的页面。例如,如果您需要打印100页文档的第1,10和100页,在“页面”文本框中输入1,10,100。只要您的文档不是由多个部分组成,那么它就可以工作。

    例如,假设你有一个文档分为10个章节,分别在文档的单独部分中,每个文档分别以1开头编号。因此,第一章编号为1-1到1-10; 第2章编号为2-1至2-20; 等等。要打印第1章和第4章,请在“页面”文本框中输入以下内容:

    S1,S4

    要打印第2章到第4章,请输入:

    S2-S4

    要打印每个部分中的各个页面,您可以将p和页码添加到章节编号。例如,要打印第1-1和2-2页,您将进入

    p1s1,p2s2

    如图A  所示。

    图A

    页面范围

    展开全文
  • //获得当前文档选定部分或光标所在位置 Dispatch selection = app.getProperty("Selection").toDispatch(); //光标定位到文档首位置 Dispatch.call(selection, "HomeKey", new Variant(6)); //在光标...
    public void uniteDoc(String[] tempIds, String savepaths) {
    		String rootPath = ****;
    		if (ObjectUtil.isNull(tempIds) || tempIds.length <= 0 || ObjectUtil.isNull(tempIds[0])) {
    			return;
    		}
    		//将jacob-1.17-M2-x64.dll文件拷到下面打印出来的目录
    		System.out.println("---------->"+System.getProperty("java.library.path"));
    		//打开word
    		ActiveXComponent app = new ActiveXComponent("Word.Application");//启动word
    		try {
    			//设置word不可见
    			app.setProperty("Visible", new Variant(false));
    			//获得documents对象
    			Object docs = app.getProperty("Documents").toDispatch();
    			//打开第一个文件
    			Temp firstTemp = this.findById(tempIds[0]);
    			Object doc = Dispatch.invoke(
    	                    (Dispatch) docs, 
    	                    "Open", 
    	                    Dispatch.Method, 
    	                    new Object[] { (String) rootPath+firstTemp.getFjurl(),
    	                            new Variant(false), new Variant(true) }, 
    	                    new int[3]).toDispatch();
    			//获得当前文档选定部分或光标所在位置
    			Dispatch selection = app.getProperty("Selection").toDispatch();
    			//光标定位到文档首位置
    			Dispatch.call(selection, "HomeKey", new Variant(6));
    			//在光标所在位置插入文本
    			insertFormatParagraph(selection, "类型:"+firstTemp.getType().getTypeName(), 
    					true, false, false, null, "10.5", "宋体", "0");
    			insertFormatParagraph(selection, "来源:"+firstTemp.getUnit().getName(), 
    					true, false, false, null, "10.5", "宋体", "0");
    			insertFormatParagraph(selection, "标题:"+firstTemp.getTitle(), 
    					true, false, false, null, "10.5", "宋体", "0");
    			//光标定位到文档末尾位置
    			Dispatch.call(selection, "EndKey", new Variant(6));
    			Dispatch.call(selection, "TypeParagraph");
    			//插入一个分页符
    			Dispatch.call(selection, "InsertBreak");
    			
    			//追加文件
    			for (int i = 1; i < tempIds.length; i++) {
    				Temp temp = this.findById(tempIds[i]);
    				if(!ObjectUtil.isNull(temp.getFjurl())){
    					File file = new File(rootPath+temp.getFjurl());
    					if(file.exists() && temp.getFjurl().endsWith("doc")){
    						//每一篇文档前添加报送类型、单位和标题
    						insertFormatParagraph(selection, "类型:"+temp.getType().getTypeName(), 
    								true, false, false, null, "10.5", "宋体", "0");
    						insertFormatParagraph(selection, "来源:"+temp.getUnit().getName(), 
    								true, false, false, null, "10.5", "宋体", "0");
    						insertFormatParagraph(selection, "标题:"+temp.getTitle(), 
    								true, false, false, null, "10.5", "宋体", "0");
    						//文档内容
    						Dispatch.invoke(selection,
    			                "insertFile", Dispatch.Method, new Object[] {
    			                        (String) rootPath+temp.getFjurl(), "",
    			                        new Variant(false), new Variant(false),
    			                        new Variant(false) }, new int[3]);
    						//每一篇文档后添加分页符
    						Dispatch.call(selection, "EndKey", new Variant(6));
    						Dispatch.call(selection, "TypeParagraph");
    						if(i != tempIds.length-1){
    							Dispatch.call(selection, "InsertBreak");
    						}
    					}
    				}
    			}
    			//保存新的word文件
    			File folder = new File(savepaths.substring(0, savepaths.lastIndexOf("/")+1));
    			if(!folder.exists() && !folder.isDirectory()){
    				folder.mkdirs();
    			}
    			Dispatch.invoke((Dispatch) doc, "SaveAs", Dispatch.Method,
    	            new Object[] { savepaths, new Variant(1) }, new int[3]);
    			Variant f = new Variant(false);
    			Dispatch.call((Dispatch) doc, "Close", f);
    		} catch (Exception e) {
    			throw new RuntimeException("合并word文件出错.原因:" + e);
    		} finally {
    			app.invoke("Quit", new Variant[] {});
    		}
    	}


    另写了一个方法,在光标位置插入一个带格式的文本段落。

    /**
    	 * 在当前光标位置插入(或将选定内容替换成)   一段带格式的文本段落
    	 * @param selection 光标位置或选定内容
    	 * @param text 插入的内容
    	 * @param isBold 是否加粗
    	 * @param isItalic 是否斜体
    	 * @param isUnderLine 是否加下划线
    	 * @param color 字体颜色
    	 * @param size 字号(只能是数字)
    	 * @param name 字体名称
    	 * @param align 对齐方式:0左对齐,1居中,2右对齐,3两端对齐,4分散对齐
    	 */
    	private void insertFormatParagraph(Dispatch selection, String text, boolean isBold, boolean isItalic, 
    			boolean isUnderLine, String color, String size, String name, String align){
    		//在光标所在位置插入文本(插入完后默认选中插入内容)
    		Dispatch.put(selection, "Text", text);
    		//设置选中部分字体格式
    		Dispatch font = Dispatch.get(selection, "Font").toDispatch();
    		if(!ObjectUtil.isNull(name)){
    			Dispatch.put(font, "Name", new Variant(name));
    		}
    		Dispatch.put(font, "Bold", new Variant(isBold));
    		Dispatch.put(font, "Italic", new Variant(isItalic));
    		Dispatch.put(font, "UnderLine", new Variant(isUnderLine));
    		if(!ObjectUtil.isNull(color)){
    			Dispatch.put(font, "Color", color);
    		}
    		if(!ObjectUtil.isNull(size)){
    			Dispatch.put(font, "Size", size);
    		}
    		if(!ObjectUtil.isNull(align)){
    			Dispatch paragraphs = Dispatch.get(selection, "Paragraphs").toDispatch();
    			Dispatch.put(paragraphs, "Alignment", new Variant(align));
    		}
    		//光标移动(取消选定内容)
    		Dispatch.call(selection, "Move");
    		//设置为一个段落(换行)
    		Dispatch.call(selection, "TypeParagraph");
    	}


    展开全文
  • 在一些的项目开发中,会有一些生成Word文件的操作,比如将获取到的一些数据添加到Word模板当中的相应的位置生成Word文档。 由于最近的Python项目当中需要将一些从服务器查出的数据添加到Word模板当中生成份...

       在一些的项目开发中,会有一些生成Word文件的操作,比如将获取到的一些数据添加到Word模板当中的相应的位置生成一份Word文档。

        由于最近的Python项目当中需要将一些从服务器查出的数据添加到Word模板当中生成一份Word文档,完成这个操作需要用到的是Python当中一个叫做docx-mailmerge的包,这个包的作用是解析MS Word docx文件,并且找到合并字段并且用你想要的任何值去填充他们。其实,这个“mailmerge”可以是一个有用的模板系统,可以用于更复杂的解决方案,而不仅仅是填充文档中的名称和地址。

    首先,我们需要安装docx-mailmerge这个包。在命令行输入语句,开始安装该包。

    pip install docx-mailmerge

    如果你的系统中已经安装了该包,系统会有如下的提示。

    在完成了docx-mailmerge的安装之后,需要在Word中进行域的设置,这些域就是你的数据填充的位置。

    以Word 2013为例,在Word模板当中,将鼠标光标移动到你细腰插入数据的地方,之后按下图所示进行操作:

    点击域之后,选择 邮件合并,域名选择MergeField,域名可以理解为你在代码中的一个变量,将你要插入的数据赋值给这个变量,你的数据便会插入到模板当中。另外,格式按照自己的要求去选择,默认为无。

    这里我简单的编辑了一个证明的模板,在需要插入数据的地方设置完域之后,结果如下图所示:

     在完成前两步工作之后,最后一步就剩下代码的编写工作了。

    在本文中,其实这一部分代码非常简单,本文我写一个简单的Demo,其中我的文件名称和给域赋的值都是写死的,在项目中生成的Word名称和给域赋值都可以是变量,还有,模板的位置,生成文件的位置可以改变,生成文件的名字可以是变量,这样,每次生成的docx文件名字就会不一样,比如在我的项目当中,我就将身份证号作为文件名称,这样按照模板生成的docx文件不会出现重复。

    document_1.write('F:\\{}.docx'.format(emp_full_info.get("identity_card")))

    由于Python默认是Unicode编码,所以字符串赋值前要加u,如果是变量赋值,则可以用decode方法,比如:

    Year=year.decode(encoding='UTF-8', errors='strict')

    Demo具体的源码:

    from mailmerge import MailMerge
    
     # 打印模板
            template = "F:\\WorkingProve11.docx"
    
            # 创建邮件合并文档并查看所有字段
    
            document_1 = MailMerge(template)
            print("Fields included in {}: {}".format(template,document.get_merge_fields()))
            document_1.merge(
                people_name=u'勒布朗',
                identity_card_id='123456789',
                begin_work_year='2018',
                begin_work_month='7',
                department_name=u'洛杉矶湖人',
                job_name=u'联盟第一人'
                
            )
    
            document_1.write('F:\\test666.docx')

    最后,在制定的F盘下出现了生成的test666.docx文件,打开之后结果如下图: 

     

    最后要注意的一点是,如果在同一位置下生成的两份文件名字一样,代码是会报错的。

    解决方法有以下几种:

    1.运行程序之前,将原来的文件删除。

    2.在代码中将文件名称更改。

    3.按照上文我所说的,将文件名称改为变量。

    希望本文可以帮助到大家。

    展开全文
  • 3.保存WORD(id标识+日期 防止文件重复.)然后供用户下载.(扩展,可以安装WORD转PDF组件 在服务端就可以找到生成后的WORD转换PDF供用户下载,满足一部分文件安全性要求比较高,不允许用户修改.) 具体代码如下: ...

    运行环境:WIN7 X64 + iis6.1                                                                                              

    开发环境:vs2012+SQL2005                                                                                              

    服务器环境:2003 X64 + SQL2005 + IIS 6.0                                                                      

    需求: 企业中需要各种各样的报表诸如WORD,简单还好说,稍微比较复杂点的,需要根据录入的信息去生成特定格式的WORD.大概15页左右包含[基本信息][业务情况][联系人信息][店面图片][记录描述][财务指标数据][评分卡][信用评级][反馈信息]等;有些内容不固定诸如[记录描述]中有可能有没有记录,有可能是1-5条数据 也有可能是超过10条的数据.还有要支持图片的插入,WORD排版等因素.

    方案:根本业务部门给出的WORD样本制作WORD文档模板(即xxx.dot文件)设置[书签],然后用应用程序调用本地WORD的COM对象接口,查找[书签]填充数据;

    排版问题:文档模板可以适用模板随时可以调整,删减内容还要删减对应的[书签]否则会有[书签]找不到的问题.

    图片插入:[书签]支持图片插入;

    不固定的记录:我分为二种情况.1.动态数据量小的3条以内,那么我就以最大为主在WORD中占位3条数据.  2.数据量大的咨询业务部门实际数目设置最大数,然后用书签占位,相当与把动态数据都搞成固定数.都是基于实际工作量战线拉太长于实际实现不利.(有兴趣的朋友可以去研究下[动态占位]问题,需要解决掉,因为模板设置,占位都需要参考业务部门给出样本WORD来对比手工占位,系统占位就要考虑换行,空格等问题.)


    其他:[书签]使用方法,根据样本WORD,打开WORD另存为.dot格式,鼠标点击需要插入[书签]的位置,点击菜单栏[插入]-[书签],键入书签名即可.

    查找[书签],Ctrl+F 查找选择[定位]选项卡 定位目标[书签]


    代码实现思路:

    1.整理需要填充到WORD模板中的数据

    2.调用CCWordApp查找模板.dot 根据[书签]去填充(文本,数字,图片)

    3.保存WORD(id标识+日期 防止文件重复.)然后供用户下载.(扩展,可以安装WORD转PDF组件 在服务端就可以找到生成后的WORD转换PDF供用户下载,满足一部分文件安全性要求比较高,不允许用户修改.)


    具体代码如下:

    业务代码

    using Microsoft.Office.Interop.Word;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data.SqlClient;
    using System.IO;
    using System.Reflection;
    using System.Web;
    using System.Web.UI.WebControls;
    
    public partial class CustInfoManage_PrintPage : System.Web.UI.Page
    {
        object missing = System.Reflection.Missing.Value;
        object readOnly = false;
        object isVisible = true;
        private CCWordApp test;
    
        DAL Da = new DAL();
    
    
    	/// <summary>
        /// 使用模板
        /// </summary>
        public void OpenModelWordSave(object sender, EventArgs e)
        {
            //根据 客户编码 获取并组织WORD文档所需的所有信息.
            string CustCode = ShowCustLabel.Text;
    
            if (CustCode == "")
            {
                return;
            }
    
            #region 填充信息整理 此处省略
            //String gsmc = Dr1["SaleComp"].ToString();//公司名称
    		#endregion
    
            try
            {
                test = new CCWordApp();
                test.Open(System.Configuration.ConfigurationManager.AppSettings["WordMod"] + "template1.dot");
                
                #region 查找书签并替换
                test.GotoBookMark("gsmc");
                test.InsertText(gsmc);
                test.SetFont("nothing");
    
                test.GotoBookMark("dmcqxz_C");
                test.InsertText(dmcqxz_C);
                test.SetFont("nothing");
    
                if (!String.IsNullOrWhiteSpace(dmtp1_C))
                {
                    test.GotoBookMark("dmtp1_C");
                    test.InsertPicture(System.Configuration.ConfigurationManager.AppSettings["OtherImage"] + dmtp1_C);
                    test.SetFont("nothing");
                }
    
                if (!String.IsNullOrWhiteSpace(dmtp2_C))
                {
                    test.GotoBookMark("dmtp2_C");
                    test.InsertPicture(System.Configuration.ConfigurationManager.AppSettings["OtherImage"] + dmtp2_C);
                    test.SetFont("nothing");
                }
    
                if (!String.IsNullOrWhiteSpace(cktp1_C))
                {
                    test.GotoBookMark("cktp1_C");
                    test.InsertPicture(System.Configuration.ConfigurationManager.AppSettings["OtherImage"] + cktp1_C);
                    test.SetFont("nothing");
                }
    
                if (!String.IsNullOrWhiteSpace(cktp2_C))
                {
                    test.GotoBookMark("cktp2_C");
                    test.InsertPicture(System.Configuration.ConfigurationManager.AppSettings["OtherImage"] + cktp2_C);
                    test.SetFont("nothing");
                }
    
                test.GotoBookMark("dyfxjhyhck_D");
                test.InsertText(dyfxjhyhck_D);
                test.SetFont("nothing");
    
                #endregion
    
                string createTime = DateTime.Now.ToString("yyyyMMddHHmmss");
                string fileName = CustCode + "_" + createTime + ".doc";
                test.SaveAs(System.Configuration.ConfigurationManager.AppSettings["WordDoc"] + fileName);
                test.Quit();
    
                #region 保存到数据库
                string InsertCommand = "INSERT INTO [CRM_CB_DownFileWord] "
                   + "( [CustCode],[fileName], [createTime])"
                   + " VALUES "
                   + "(@CustCode,@fileName, @createTime)";
    
                SqlCommand SqlCmd = new SqlCommand(InsertCommand);
                SqlCmd.Parameters.Add("@CustCode", System.Data.SqlDbType.Decimal).Value = CustCode;
                SqlCmd.Parameters.Add("@fileName", System.Data.SqlDbType.NVarChar).Value = fileName;
                SqlCmd.Parameters.Add("@createTime", System.Data.SqlDbType.NVarChar).Value = createTime;
    
                string Mess = "";
                if (Da.ExecuteNonQuery(SqlCmd))
                {
                    Mess = CustCode + " 保存成功!";
                    BaseCls.Alert(Page, Mess);
                }
                else
                {
                    BaseCls.Alert(Page, "错误,请检查!");
                    return;
                }
                #endregion
            }
    
            catch (Exception exc)
            {
                test.Quit();
                throw (exc);
            }
    
        }
    
    
    
    
    
    
    }


    CCWordApp实体类:

    using System;
    using System.ComponentModel;
    
    public class CCWordApp
    {
        private Microsoft.Office.Interop.Word.ApplicationClass oWordApplic;	// a reference to Word application 引用Word应用程序
        private Microsoft.Office.Interop.Word.Document oDoc;					// a reference to the document 引用文档
    
    
        public CCWordApp()
        {
            // activate the interface with the COM object of Microsoft Word
            //激活与Microsoft Word的COM对象的接口
            oWordApplic = new Microsoft.Office.Interop.Word.ApplicationClass();
        }
    
        /// <summary>
        /// 插入图片
        /// </summary>
        /// <param name="picPath"></param>
        public void InsertPicture(string picPath)
        {
            object missing = System.Reflection.Missing.Value;
            oWordApplic.Selection.InlineShapes.AddPicture(picPath, ref missing, ref missing, ref missing);
        }
    
        // Open a file (the file must exists) and activate it  打开一个文件(该文件必须存在),并激活它
        public void Open(string strFileName)
        {
            object fileName = strFileName;
            object readOnly = false;
            object isVisible = true;
            object missing = System.Reflection.Missing.Value;
    
            oDoc = oWordApplic.Documents.Open(ref fileName, ref missing, ref readOnly,
                ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing);
    
            oDoc.Activate();
        }
    
    
        // Open a new document打开一个新文档
        public void Open()
        {
            object missing = System.Reflection.Missing.Value;
            oDoc = oWordApplic.Documents.Add(ref missing, ref missing, ref missing, ref missing);
    
            oDoc.Activate();
        }
    
    
    
    
        public void Quit()
        {
            object missing = System.Reflection.Missing.Value;
            oWordApplic.Application.Quit(ref missing, ref missing, ref missing);
        }
    
        public void Save()
        {
            oDoc.Save();
        }
    
        public void SaveAs(string strFileName)
        {
            object missing = System.Reflection.Missing.Value;
            object fileName = strFileName;
    
            oDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        }
    
        // Save the document in HTML format 以HTML格式保存文档
        public void SaveAsHtml(string strFileName)
        {
            object missing = System.Reflection.Missing.Value;
            object fileName = strFileName;
            object Format = (int)Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML;
            oDoc.SaveAs(ref fileName, ref Format, ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        }
    
    
    
        public void InsertText(string strText)
        {
            oWordApplic.Selection.TypeText(strText);
        }
    
        public void InsertLineBreak()
        {
            oWordApplic.Selection.TypeParagraph();
        }
        public void InsertLineBreak(int nline)
        {
            for (int i = 0; i < nline; i++)
                oWordApplic.Selection.TypeParagraph();
        }
    
    
        // Change the paragraph alignement 更改段落对齐键相
        public void SetAlignment(string strType)
        {
            switch (strType)
            {
                case "Center":
                    oWordApplic.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    break;
                case "Left":
                    oWordApplic.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    break;
                case "Right":
                    oWordApplic.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
                    break;
                case "Justify":
                    oWordApplic.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphJustify;
                    break;
            }
    
        }
    
    
        // if you use thif function to change the font you should call it again with 如果您使用此功能来改变字体,你应该再次调用它 
        // no parameter in order to set the font without a particular format 为了不带参数设置字体没有特定的格式
        public void SetFont(string strType)
        {
            switch (strType)
            {
                case "Bold":
                    oWordApplic.Selection.Font.Bold = 1;
                    break;
                case "Italic":
                    oWordApplic.Selection.Font.Italic = 1;
                    break;
                case "Underlined":
                    oWordApplic.Selection.Font.Subscript = 0;
                    break;
            }
    
        }
    
        // disable all the style  禁用所有的风格
        public void SetFont()
        {
            oWordApplic.Selection.Font.Bold = 0;
            oWordApplic.Selection.Font.Italic = 0;
            oWordApplic.Selection.Font.Subscript = 0;
    
        }
    
        public void SetFontName(string strType)
        {
            oWordApplic.Selection.Font.Name = strType;
    
        }
    
        public void SetFontSize(int nSize)
        {
            oWordApplic.Selection.Font.Size = nSize;
    
        }
    
        public void InsertPagebreak()
        {
            // VB : Selection.InsertBreak Type:=wdPageBreak
            object pBreak = (int)Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
            oWordApplic.Selection.InsertBreak(ref pBreak);
        }
    
        // Go to a predefined bookmark, if the bookmark doesn't exists the application will raise an error 
        //去到一个预先定义的书签,如果书签不存在应用程序将引发错误
        public void GotoBookMark(string strBookMarkName)
        {
            // VB :  Selection.GoTo What:=wdGoToBookmark, Name:="nome"
            object missing = System.Reflection.Missing.Value;
    
            object Bookmark = (int)Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
            object NameBookMark = strBookMarkName;
            oWordApplic.Selection.GoTo(ref Bookmark, ref missing, ref missing, ref NameBookMark);
        }
    
        public void GoToTheEnd()
        {
            // VB :  Selection.EndKey Unit:=wdStory
            object missing = System.Reflection.Missing.Value;
            object unit;
            unit = Microsoft.Office.Interop.Word.WdUnits.wdStory;
            oWordApplic.Selection.EndKey(ref unit, ref missing);
    
        }
        public void GoToTheBeginning()
        {
            // VB : Selection.HomeKey Unit:=wdStory
            object missing = System.Reflection.Missing.Value;
            object unit;
            unit = Microsoft.Office.Interop.Word.WdUnits.wdStory;
            oWordApplic.Selection.HomeKey(ref unit, ref missing);
    
        }
    
        public void GoToTheTable(int ntable)
        {
            //	Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1, Name:=""
            //    Selection.Find.ClearFormatting
            //    With Selection.Find
            //        .Text = ""
            //        .Replacement.Text = ""
            //        .Forward = True
            //        .Wrap = wdFindContinue
            //        .Format = False
            //        .MatchCase = False
            //        .MatchWholeWord = False
            //        .MatchWildcards = False
            //        .MatchSoundsLike = False
            //        .MatchAllWordForms = False
            //    End With
    
            object missing = System.Reflection.Missing.Value;
            object what;
            what = Microsoft.Office.Interop.Word.WdUnits.wdTable;
            object which;
            which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToFirst;
            object count;
            count = 1;
            oWordApplic.Selection.GoTo(ref what, ref which, ref count, ref missing);
            oWordApplic.Selection.Find.ClearFormatting();
    
            oWordApplic.Selection.Text = "";
    
    
        }
    
        public void GoToRightCell()
        {
            // Selection.MoveRight Unit:=wdCell
    
            object missing = System.Reflection.Missing.Value;
            object direction;
            direction = Microsoft.Office.Interop.Word.WdUnits.wdCell;
            oWordApplic.Selection.MoveRight(ref direction, ref missing, ref missing);
        }
    
        public void GoToLeftCell()
        {
            // Selection.MoveRight Unit:=wdCell
    
            object missing = System.Reflection.Missing.Value;
            object direction;
            direction = Microsoft.Office.Interop.Word.WdUnits.wdCell;
            oWordApplic.Selection.MoveLeft(ref direction, ref missing, ref missing);
        }
    
        public void GoToDownCell()
        {
            // Selection.MoveRight Unit:=wdCell
    
            object missing = System.Reflection.Missing.Value;
            object direction;
            direction = Microsoft.Office.Interop.Word.WdUnits.wdLine;
            oWordApplic.Selection.MoveDown(ref direction, ref missing, ref missing);
        }
    
        public void GoToUpCell()
        {
            // Selection.MoveRight Unit:=wdCell
    
            object missing = System.Reflection.Missing.Value;
            object direction;
            direction = Microsoft.Office.Interop.Word.WdUnits.wdLine;
            oWordApplic.Selection.MoveUp(ref direction, ref missing, ref missing);
        }
    
    
        // this function doesn't work 这个功能不起作用
        public void InsertPageNumber(string strType, bool bHeader)
        {
            object missing = System.Reflection.Missing.Value;
            object alignment;
            object bFirstPage = false;
            object bF = true;
            //if (bHeader == true)
            //WordApplic.Selection.HeaderFooter.PageNumbers.ShowFirstPageNumber = bF;
            switch (strType)
            {
                case "Center":
                    alignment = Microsoft.Office.Interop.Word.WdPageNumberAlignment.wdAlignPageNumberCenter;
                    //WordApplic.Selection.HeaderFooter.PageNumbers.Add(ref alignment,ref bFirstPage);
                    //Word.Selection objSelection = WordApplic.pSelection;
    
                    //oWordApplic.Selection.HeaderFooter.PageNumbers.Item(1).Alignment = Microsoft.Office.Interop.Word.WdPageNumberAlignment.wdAlignPageNumberCenter;
                    break;
                case "Right":
                    alignment = Microsoft.Office.Interop.Word.WdPageNumberAlignment.wdAlignPageNumberRight;
                    //oWordApplic.Selection.HeaderFooter.PageNumbers.Item(1).Alignment = Microsoft.Office.Interop.Word.WdPageNumberAlignment.wdAlignPageNumberRight;
                    break;
                case "Left":
                    alignment = Microsoft.Office.Interop.Word.WdPageNumberAlignment.wdAlignPageNumberLeft;
                    oWordApplic.Selection.HeaderFooter.PageNumbers.Add(ref alignment, ref bFirstPage);
                    break;
            }
    
        }
    
    
    }
    //object units = WdUnits.wdCharacter;
    //object last=doc.Characters.Count;
    //doc.Range(ref first, ref last).Delete(ref units, ref last)


    发布测试环境可能会遇到的问题1:

    “/”应用程序中的服务器错误。

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。

    说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

    异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。 

    ASP.NET 无权访问所请求的资源。请考虑对 ASP.NET 请求标识授予访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 和 IIS 7 上为网络服务,在 IIS 7.5 上为配置的应用程序池标识)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。 

    To grant ASP.NET access to a file, right-click the file in File Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

    源错误: 

    行 1679:        catch (Exception exc)
    行 1680:        {
    行 1681:            throw (exc);
    行 1682:            //StatusMessage.Text = exc.Message;
    行 1683:            //StatusMessage.Visible = true;

    源文件: e:\T1Web - 测试\CustInfoManage\PrintPage.aspx.cs     行: 1681 

    堆栈跟踪: 

    [UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。]
       CustInfoManage_PrintPage.OpenModelWordSave(Object sender, EventArgs e) in e:\T1Web - 测试\CustInfoManage\PrintPage.aspx.cs:1681
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9556538
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
    


    版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18067


    解决方案:                                                                                                                           

    参考此文链接:http://axislover.blog.163.com/blog/static/10776515200832531059319/

    如果无法访问摘录如下:

    Application当程序运行到这句时出现下面的错误:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。3.单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后 自定义->编辑->添加ASP.NET账户和IUSER_计算机名。解决方法二:如果上述方法不能解决问题,就应该是权限问题,请尝试用下面 的方法:在web.config中使用身份模拟,在<system.web>节中加入 <identity impersonate="true" userName="你的用户名" password="密码"/> </system.web>

    1:在服务器上安装office的word软件.

    2:在"开始"- >"运行"中输入dcomcnfg.exe启动"组件服务"

    3:依次双击"组件服务"- >"计算机"- >"我的电脑"- >"DCOM配置"

    4:在"DCOM配置"中找到"Microsoft   word应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft   word应用程序属性"对话框

    5:点击"标识"标签,选择"交互式用户"

    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加

    一个"NETWORK   SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.

    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK

    SERVICE"用户,然后赋予"本地访问"权限.

    这样,我们便配置好了相应的word的DCOM权限.

    注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户

    由于word是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调用这个功能的时候再删除以前在服务器上所生成的所有word

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005

    在CSDN上总是有网友问这个问题,自己也遇到过,因些写出来供参考:

    症状:

    oWordApplic = New Word.Application

    当程序运行到这句时出现下面的错误:

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

    oWordApplic = New Word.Application

    当程序运行到这句时出现下面的错误:

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

    解决方法一:

    控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档

    之后

    单击属性打开此应用程序的属性对话框。  

    2. 单击标识选项卡,然后选择交互式用户。

    3.单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后

    自定义->编辑->添加ASP.NET账户和IUSER_计算机名

    * 这些帐户仅在计算机上安装有 IIS 的情况下才存在。

    13. 确保允许每个用户访问,然后单击确定。

    14. 单击确定关闭 DCOMCNFG。

    解决方法二:

    如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:

    在web.config中使用身份模拟,在<system.web>节中加入   <identity impersonate="true" userName="你的用户名" password="密码"/>

    </system.web>

    PS:进我自己测试,做完1-7步骤就已经可以修复这个问题了.                                            




    发布测试环境可能会遇到的问题2:

    明明有装Word2007, 并且程序也能用这个组件来操作Word, 可为什么组件服务里面看不到CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件?我是希望能显示CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件, 好设置它的权限了。 省得ASP.NET要模拟帐户

    在64bit系统中的DCOM管理中添加32Bit的Excel、Word等的管理)   

     1).开始--〉运行--〉cmd 
       2)命令提示符下面,输入“mmc -32”回车,打开32的控制台 
       3).文件菜单中,添加删除管理单元--〉“组件服务”(在最下面),确认后,关闭即可。 
       4).开始-管理工具-组件服务,在"DCOM配置"中,可以找到“"Microsoft Excel 应用程序”了。找到“Microsoft Excel 应用程序”,在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框  5).点击“标识”标签,选择“交互式用户” **:这个在32Bit的2003上或XP上不需要,但这里需要。  6).点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限 
       7).依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.


    PS:这个问题算是误导了.我是先碰到问题2的,但是按此方法无法解决,用问题1中在"开始"- >"运行"中输入dcomcnfg.exe启动"组件服务"即可查到WORD组件.




    发布测试环境可能会遇到的问题3:

    “/”应用程序中的服务器错误。

    当前标识(IT-CHENXIAOPENG\test)没有对“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的写访问权限。

    说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

    异常详细信息: System.Web.HttpException: 当前标识(IT-CHENXIAOPENG\test)没有对“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的写访问权限。

    源错误: 

    执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

    堆栈跟踪: 

    [HttpException (0x80004005): 当前标识(IT-CHENXIAOPENG\test)没有对“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的写访问权限。]
       System.Web.HttpRuntime.SetUpCodegenDirectory(CompilationSection compilationSection) +9902226
       System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags, PolicyLevel policyLevel, Exception appDomainCreationException) +199
    
    [HttpException (0x80004005): 当前标识(IT-CHENXIAOPENG\test)没有对“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的写访问权限。]
       System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9880168
       System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
       System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254
    


    版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18067


    PS:这个问题是我自己搞出来的.还记得问题1中我们配置了web.config中设置了一个用TEST(<identityimpersonate="true"userName="test"password="xxxxxxxxxx"/>)我给TEST设置的是管理员组权限.然后为了安全性考虑,将其设置为普通用户组.就出此问题,只需要找到C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 文件夹,右键-属性-安全 编辑添加TEST用户权限即可解决此问题.


    其实这里有个问题,上面将test用户从管理员用户组变更为普通用户组,网站调用正常.更改用户组 还有一点是:[直到下一次用户登录时对用户组成员关系的更改才生效].

    所以我上面PS中说的才能成功.隔天后我才暴露出了这个问题. 新建了一个管理组用户test2才对比出了这个问题.希望引以为鉴.

    展开全文
  • 如果仅需要对文档中的一部分内容进行打印,可以在打印时指定页码范围: ①直接输入数字指定打印范围。如1-3,表示连续打印第1页到第3页;如果打印不连续的页面,可以单独指定页码,并用逗号分隔开,如:1,3,5。...
  • 打印word文档时遇到标记区如何取消

    千次阅读 2019-04-19 11:32:00
    故障描述:word页面显示正常,打印以及打印预览的时候,页面上会出现部分暗色区域(标记区) 故障原因:简单标记惹的祸 解决办法:word菜单栏-审阅-简单标记-无标记 具体步骤如图: 1.word页面显示一切...
  • Python-docx 模块读写 Word 文档基础():创建文档、段落格式、字体格式设置方法前言:1、创建 Word 文档及基础用法:2、段落格式设置:3、字体格式设置:结尾:【Python与Word文档】专栏 前言: 从这篇博客开始...
  • 原因:添加了批注 解决方法:审阅》删除批注
  • XML导出word文档

    千次阅读 2018-01-25 10:58:12
    最近做项目,需要导出word文档的报表,网上查询了一些资料,感觉用xml做这个相对比较简单,Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker...
  • 如图这是打开了WPS的word文档页面,但是页面的右边有段空白,这是打开了【审阅-修订-插入与删除】,关掉这个选项后就好了。
  • word文档编辑技巧

    2014-05-20 13:39:32
    Word文档精确“减肥”五小招 68 如何用Word实现在网上开会 72 七种办法减少Word容量 74 隐藏在word汉字里面的玄机 75 Word技巧:次特殊的查找和替换 78 在Word中为三位数字设置带圈字符 80 巧用Word输入生僻字 81...
  • mac word 同时查看文档两个部分

    千次阅读 2016-12-04 16:08:27
    这非常有用,例如,如果您需要在另一个工作时参考文档一部分。 在视图(窗口)选项卡上,单击排列,,然后单击拆分。 如果窗口处于不够宽, Word将显示直接在视图选项卡上的拆分。 若要调整窗格的相对大小...
  • android输出word文档

    千次阅读 2017-08-28 13:44:05
    而且不借助第三方的软件可以查看word文档开始听这个需求差不多蒙了,这要怎么做,为什么不把生成word文档这个工作放在后台呢,抱怨归抱怨,但是面对需求只能硬着头皮做了,经过各种拷问度娘和谷哥,终于找了个...
  • 当把数据保存到数据库中,需要新建很多的字段,而且操作很繁琐,于是想到网页的信息创建到word文本中,在显示的时,可以在线打开word,也可以把word转换成html标签显示。 这样使用word代替网页的原因有:  第...
  • [实用]【更新中】Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)基于Apache POI对Word进行操作、基于Apache POI封装的word文档工具V1.0介绍二、Apache POI 知识1. jar包(maven的,这个不多做解释...
  • Java解析word文档

    千次阅读 2017-02-14 15:35:00
    在互联网教育行业,做内容相关的项目经常碰到的个问题就是如何解析word文档。 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率都较高。 疑难点 ...
  • C#操作word文档()

    千次阅读 2011-04-07 08:45:00
    1.c#操作word 在指定书签插入文字或者图片 using Word = Microsoft.Office.Interop.Word; object Nothing = System.Reflection.Missing.Value;  object format = Word.WdSaveFormat....
  • Aspose.Words控件是个类库,使您可以执行大部分文件处理的工作。 Aspose.Words支持DOC,OOXML,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。采用Aspose.Words您可以生成,修改,转换,渲染和打印,无需...
  • Spring Boot中使用freeMarker生成word文档

    万次阅读 2017-01-10 14:11:20
    在Spring boot中使用freeMarker生成word文档
  • 用java生成word文档

    千次阅读 2009-01-16 21:10:00
    公司有个项目, 要用java生成word文档, 在网上找来找去也没有找到好的生成word文档的库, 找到apache的POI可以使用, 但是所有的release版中也没有支持word的class. 只能从svn上下载源代码编译. 后来发现java支持...
  • word超出纸张打印范围

    千次阅读 2017-08-11 16:14:14
    打印一个含很多表格的文档,正常A4纸打印被提示内容超出打印纸张范围,网上搜了好久说在word页面设置里调整页边距和纸张大小的方法,都没有解决,这个花费我60分钟左右。准备放弃的时候突然想到转换成pdf格式试一下...
  • 经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 word的几个主要xml标志 w:body 正文内容 w:p 个段落 w:tbl 表格数据 w...
  • java使用jacob操作word文档

    千次阅读 2014-11-26 14:47:12
    ava使用jacob操作word文档 java调用com组件操作word使用总结(jacob) 简单描述  在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作;  、准备工作 ...
  • [Word] Word里指定打印的页码范围

    千次阅读 2016-05-11 09:00:42
    【转载】概要本文介绍如何打印... 在多节文档中,如果你不提供节号,Word就无法确定你要打印哪个“第页”。打印跨节的页面范围如果要打印的页面范围跨节, 在“打印”对话框中的“页码范围中”中使用下面的语法: p
  • 控制生成word文档

    千次阅读 2007-03-31 23:28:00
    前段时间才做了个,将测试数据生成word文档。 其中有表格、画图形 用模版文件来替换最方便,修改模版就修改了格式。 将要填的数据定义成个符号如 在程序中执行word的搜索替换就行 如: xxxx.replace("","测试人")...
  • 完美解决方案:Java生成复杂Word文档

    千次阅读 2013-11-08 17:25:36
    客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。  POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下个20多...
  • poi操作word文档总结

    万次阅读 2014-06-05 17:18:43
    POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量。...后来找到方法可以分段落读入纯word文档。要找到了word基
  • 使用python编辑和读取word文档

    千次阅读 2018-07-12 17:23:00
    python调用word接口主要用到的模板为python-docx...使用python新建word文档,操作就像文档里介绍的那样: 1 from docx import Document 2 from docx.shared import Inches 3 4 document = Document()...
  • C#操作word文档

    万次阅读 2008-01-17 14:19:00
    1.c#操作word 在指定书签插入文字或者图片using Word = Microsoft.Office.Interop.Word;object Nothing = System.Reflection.Missing.Value; object format = Word.WdSaveFormat.wdFormatDocument; Word.Applic
  • C#操作word文档

    千次阅读 2008-09-21 10:52:00
    1.c#操作word 在指定书签插入文字或者图片CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1using Word = Microsoft.Office.Interop.Word;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,511
精华内容 17,004
关键字:

word文档只能打印一部分