精华内容
下载资源
问答
  • 已在word 2003中测试成功。选中所有需要统计字数文档,该软件会自动计数并求和,无需组打开文档计数。
  • Word2003中有一非常实用的功能,那就是字数统计。它可以帮我们统计出文档的页数、字数、字符数、段落数等信息,如果你的文档中有脚注和尾注,还可以选择是否将它们计入统计中。 更《易雪龙玩Word》教程请点击...
    Word写论文、小说这类有字数要求的文档时,如何统计已经写完的字数呢?Word2003中有一个非常实用的功能,那就是字数统计。它可以帮我们统计出文档的页数、字数、字符数、段落数等信息,如果你的文档中有脚注和尾注,还可以选择是否将它们计入统计中。

    更多《易雪龙玩Word》教程请点击字数统计

    方法一

    单击“工具”菜单下的“字数统计”命令,会弹出一个对话框,里面有关于字数统计的信息。

    方法一

    方法二

    按下Ctrl+Shift+G组合键,也会弹出“字数统计”对话框。
    展开全文
  • 需求通过读取word文件来获取文档字数,便于实施业务。 一开始用的Tika来做的,由于特殊字符解析的不是很正确,又换成POI来读取也有点问题, 最后用Jacob来读取解析,达到预定的结果集。再次记录下,有不对...

    前言

    需求:通过读取word文件来获取文档字数,便于实施业务。
    一开始用的Tika来做的,由于特殊字符解析的不是很正确,又换成POI来读取也有点问题,
    最后用Jacob来读取解析,达到预定的结果集。再次记录下,有不对的地方欢迎指正。

    Tika的实现方式

    引入依赖

    <!-- https://mvnrepository.com/artifact/org.apache.tika/tika-core -->
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-core</artifactId>
                <version>1.20</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers -->
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-parsers</artifactId>
                <version>1.20</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.tika/tika-app -->
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-app</artifactId>
                <version>1.20</version>
            </dependency>
    
    

    通过parseToString方法取文件内容

        public static String extract(File file) {
        	if (file == null || !file.exists()) {
        		throw new AppException("文件不存在");
        	}
        	String suffix = getSuffix(file);
        	if (!".doc".equals(suffix) && !".docx".equals(suffix) && 
        			!".pdf".equals(suffix) && !".txt".equals(suffix)) {
        		throw new AppException("不支持的文件格式");
        	}
    		Tika tika = new Tika();
    		try {
    			return tika.parseToString(file);
    		} catch (IOException | TikaException e) {
    			logger.error("cannot extract file content ", e);
    		}
    		return "";
        }
       public static String getSuffix(File file) {
            if (file.isFile()) {
                String name = Utils.trimilSpace(file.getName());
                if (name.contains(".")) {
                    String suffix = name.substring(name.lastIndexOf("."));
                    return suffix.toLowerCase();
                }
            }
            return null;
        }
    

    得到文档通过Tika解析的字符串,来做统计处理
    此实现方式参考 https://www.cnblogs.com/caer/p/6036408.html

    public static int getMSWordsCount(String context) {
    		int words_count = 0;
    		// 中文单词
    		String cn_words = context.replaceAll("[^(\\u4e00-\\u9fa5,。《》?;’‘:“”【】、)(……¥!·)]", "");
    		int cn_words_count = cn_words.length();
    		// 非中文单词
    		String non_cn_words = context.replaceAll("[^(a-zA-Z0-9`\\-=\';.,/~!@#$%^&*()_+|}{\":><?\\[\\])]", " ");
    		int non_cn_words_count = 0;
    		String[] ss = non_cn_words.split(" ");
    		for (String s : ss) {
    			if (s.trim().length() != 0)
    				non_cn_words_count++;
    		}
    //中文和非中文单词合计
    		words_count = cn_words_count + non_cn_words_count;
    //        ToolLog.d(ConstString.TAG, "汉字:" + cn_words_count + "\n\t字符:" + non_cn_words_count);
    		return words_count;
    	}
    

    最终实现word字数的统计但与打开office里面显示的有出入不得在另谋途径 (若文件内没有特殊属性可以用此方法)

    POI读取方式

    方式1

    此方式参考https://gitee.com/chunsw/codes/epjix5938htz2krgfo0ln29 兴趣的同学移步
    maven依赖

     <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>3.14</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
    
    import org.apache.commons.lang3.ArrayUtils;
    import org.apache.poi.hwpf.extractor.WordExtractor;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    
    /**
     * 统计字符数 字数 
     * @return [统计字符数,字数,运行时间]
     */
    public class CountDoc {
        static int[] wordCountNew(String doc, boolean isDebug) throws Exception {
            long time = System.currentTimeMillis();
            InputStream is = new FileInputStream(new File(doc));
            WordExtractor ex = new WordExtractor(is);
            int cnt = 0;
            int sumCount = 0;//统计总字符数
            StringBuilder builder = new StringBuilder();
            for (String text : ex.getParagraphText()) {
    //            text = text.replaceAll("\u0007", "").replaceAll("\f", "")
    //                    .replaceAll("\r", "").replaceAll("\n", "")
    //                    .replaceAll("\u0015", "");
                if (isDebug) {
                    text = trimAllChars(text, new char[] { '\u0007', '\f', '\b', '\u0015' });
                } else {
                    text = trimAllChars(text, new char[] { '\u0007', '\f', '\b', '\u0015', '\r', '\n' });
                }
    
                String prefix = " TOC \\o \\u \u0014";
                if (text.startsWith(prefix))
                    text = text.substring(prefix.length());
    //            flag = "\u0013 EMBED Visio.Drawing.11 \u0014\u0001";
    //            flag = "\u0013 EMBED Word.Document.12 \\s \u0014\u0001";
                int start = text.indexOf("\u0013");
                int end = text.indexOf("\u0014\u0001");
                if (start >= 0 && end > start) {
                    text = text.replaceAll("\u0013[^\u0014\u0001]+\u0014\u0001", "");
                }
                text = text.replaceAll("\u0013[^\u0014\u0013]+\u0014", "");
    
                String flag = "\u0013 HYPERLINK";
                int pos = text.indexOf(flag);
                if (pos >= 0) {
                    String[] arr = text.split(" \u0014");
                    text = text.substring(0, pos) + arr[1];
                }
    
                if (text.length() >= 767) {
                    // word doc格式时, 如果连续字符数数大于767个(大于等于768), 则该段落的字数不计入
    //                if (text.replaceAll(" ", "").length() < text.length() - 767) { //
                    text = text.replaceAll(" {767,}", "");
    //                }
                }
    
                if (isDebug)
                    builder.append(text);
                cnt += text.length();
                sumCount +=text.split(" ").length;
            }
    
            int t = Long.valueOf(System.currentTimeMillis() - time).intValue();
    
            if (isDebug) {
                System.out.println(builder.toString()); // .replaceAll("\r", "").replaceAll("\n", "")
                System.out.println(cnt);
                System.out.println(t + " ms");
            }
           return new int[] { cnt, sumCount,t };
        }
    
        private static String trimAllChars(String text, char[] chars) {
            if (text == null || text.isEmpty())
                return text;
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < text.length(); i++) {
                if (!ArrayUtils.contains(chars, text.charAt(i)))
                    builder.append(text.charAt(i));
            }
            return builder.toString();
        }
    }
    

    方式2

    /**
    	 * POI 读取word文件内容
    	 * @param path 文件路径
    	 * @return 文件内容字符串
    	 */
    	public static String readWord(String path) {
    		String buffer = "";
    		try {
    			if (path.endsWith(".doc")) {
    				InputStream is = new FileInputStream(new File(path));
    				WordExtractor ex = new WordExtractor(is);
    				buffer = ex.getText();
    				ex.close();
    			} else if (path.endsWith("docx")) {
    				OPCPackage opcPackage = POIXMLDocument.openPackage(path);
    				POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
    				buffer = extractor.getText();
    				extractor.close();
    			} else {
    				System.out.println("此文件不是word文件!");
    			}
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return buffer;
    	}
    

    再用此方式统计解析 https://www.cnblogs.com/caer/p/6036408.html

    此上两种方式都于我的目的有些出入

    Jacob方式(完全符合)

    Jacob简介使用信息我就不在此阐述了,直接上实现方式
    下载jar包
    http://download.csdn.net/download/javashixiaofei/9696752

    如上是jacob-1.17-M2.jar对应的jar包和dll文件…但是我在maven仓库中并没有发现jacob-1.17版本的.
    所以如果使用maven项目的话推荐下载jacob-1.14版本的jar包和dll文件.
    http://download.csdn.net/detail/ab873497717/5853741这个是dll文件,jar包文件可以去Maven仓库中去找.

    重点

    要说的一点就是关于到office里面宏的问题请参考下面两个链接

    详细参考https://www.iteye.com/blog/men4661273-2097871

    有关于 BuiltInDocumentProperties里面的属性 参考http://blog.sina.com.cn/s/blog_803215760102xjt3.html
    更多宏元素属性https://docs.microsoft.com/zh-cn/office/vba/api/Word.Selection

    	/**
         * 通过 JACOB 统计word 字数
         * @param path word文档所在路径
         */
         public static Integer wordCount(String path) {
    		ActiveXComponent wordCom = null;
    		Dispatch wrdDocs = null;
    		String suffix = getSuffix(path);
    		if (!".doc".equals(suffix) && !".docx".equals(suffix) &&
    				!".pdf".equals(suffix) && !".txt".equals(suffix)) {
    			throw new AppException("不支持的文件格式");
    		}
    		try {
                // 建立ActiveX部件
                wordCom = new ActiveXComponent("Word.Application");
                //word应用程序不可见
                wordCom.setProperty("Visible", false);
                // 返回wrdCom.Documents的Dispatch
                wrdDocs = wordCom.getProperty("Documents").toDispatch();//Documents表示word的所有文档窗口(word是多文档应用程序)
                // 调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
                Dispatch wordDoc = Dispatch.call(wrdDocs, "Open", path, false, true, false).toDispatch();
                Dispatch activeDocument  = Dispatch.get(wordCom, "ActiveDocument").toDispatch();
    			int count = Dispatch.call(activeDocument, "BuiltInDocumentProperties",new Variant(15)).toInt();
                //关闭文档且不保存
                Dispatch.call(wordDoc, "Close", new Variant(false));
    			return count;
            } catch (Exception e) {
    			logger.warn("Failed to convert '{}'.", path);
    			//出现此错误,应该强制杀死进程
    			try {
    				Runtime.getRuntime().exec("taskkill /f /im WINWORD.exe*");
    			} catch (IOException ie) {
    				logger.warn("failed to kill winword ", ie);
    			}
            }finally {
    			if (wordCom != null) {
    				try {
    					//退出进程对象
    					wordCom.invoke("Quit", new Variant[0]);
    				} catch (Exception e) {
    					logger.warn("Quit word app failed", e);
    				}
    				wordCom = null;
    				wrdDocs = null;
    			}
    			ComThread.Release();
    		}
            return null;
        }
      public static String getSuffix(String fileName) {
            if (fileName.contains(".")) {
                String suffix = fileName.substring(fileName.lastIndexOf("."));
                return trimilSpace(suffix.toLowerCase());
            }
            throw new AppException("文件没有后缀");
        }
    

    综上就是对于操作文档踩过的坑记录下,希望能起到帮助 Good luck

    展开全文
  • 急待解决的问题就是如何用delphi实现word中的统计字数另外想了解一些关于操作word的相关内容比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等…… 用OLE的方法控制Word几乎和VBA一样,可以...

    急待解决的问题就是如何用delphi实现word中的统计字数 
    另外想多了解一些关于操作word的相关内容 
    比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等……

     
    用OLE的方法控制Word几乎和VBA一样,可以控制Word的所有功能,缺点是没有代码提示,要参照Word的帮助和VBA。

    用TWordApplication组件的方式有代码提示,但有很多功能用不了,而且在调用Word的一些方法时,不能省略默认的参数,写参数写到手软。

    Word里面的字数统计是特殊的内置对话框,用宏是录制不下来的。

    var 
        WordApp,WordDoc:OleVariant;

    begin 
        WordApp:=CreateOleObject( 'Word.Application '); 
        WordDoc:=WordApp.Documents.Open( 'f:\Test.Doc '); 
        WordApp.Visible:=True; 
        Memo1.Lines.Add( '字数 '+InttoStr(WordDoc.Words.Count)); 
        Memo1.Lines.Add( '字符数(包括空格) '+InttoStr(WordDoc.Characters.Count-WordDoc.Paragraphs.Count)); 
    // 
    //   退出Word 
    // 
    end;

    多谢楼上

    上面的程序包括空格的统计结果是正确的,但不包含空格的WordDoc.Words.Count跟word里面的结果还是不一样,而且差的很多

    字数统计里关于字数的有三项,一是字数,二是字符数(不计空格),三是字符数(计空格)

    Memo1.Lines.Add( '字数 '+InttoStr(WordDoc.Words.Count)); 
    是对应 "字数统计 "对话框中 "字数 "那一项,即第一项,意思是 "包括空格的字数 ",不是不包括空格.在我机上测试的时候没有问题啊,回头我再试一试.

    Memo1.Lines.Add( '字符数(包括空格) '+InttoStr(WordDoc.Characters.Count-WordDoc.Paragraphs.Count));对应的是第三项,即 "包括空格的字符数 "

    至于第二项我也不知道怎么求.如果一定要弄的话,我只有一个笨办法就是每个字符判断是不是空格,计出空格数后再从字符总数中扣了.

    退出代码:

    WordDoc.Saved:=True;     //不保存文件.如果不保存设Saved为真,否则为假. 
    WordDoc.Close; 
    WordApp.Quit; 
    WordDoc:=Unassigned;


    回头试了一下字数那里是有问题


    试了很久终于搞定了,呵呵。微软的帮助看来还是有些讲得不清楚。下面是完整的代码。

    uses   ComObj;

    const 
        wdDialogToolsWordCount   =   $000000E4;

    var 
        WordApp,WordDoc,WordDialog:OleVariant;

    begin 
        WordApp:=CreateOleObject( 'Word.Application '); 
        WordDoc:=WordApp.Documents.Open( 'E:\Test.Doc '); 
    //  WordApp.Visible:=True; 
        WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount); 
        Memo1.Lines.Add( '字数: '+InttoStr(WordDialog.Words)); 
        Memo1.Lines.Add( '字符数(不计空格) '+InttoStr(WordDialog.Characters)); 
        Memo1.Lines.Add( '字符数(计空格) '+InttoStr(WordDialog.CharactersIncludingSpaces)); 
        WordDoc.Saved:=True; 
        WordDoc.Close; 
        WordApp.Quit; 
        WordDialog:=Unassigned; 
        WordDoc:=Unassigned; 
        WordApp:=Unassigned; 
    end;

    这些结果类的内置对话框好像总要执行一下,否则它的数值就不能保证。

    在WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount);的后面加上一句:

        WordDialog.Execute;

    就可以了。

    转载于:https://www.cnblogs.com/jcomet/p/7561140.html

    展开全文
  • 由Delphi写成(因为不需要配置复杂的环境)在我的机器上,winxp pro sp3,office 2003测试成功要求1、关闭所有的word进程2、没有装如endnote之类的word插件程序,或者计算字数文档中不包含该插件信息没有协议,...
    由Delphi写成(因为不需要配置复杂的环境)
    在我的机器上,winxp pro sp3,office 2003测试成功
    要求
    1、关闭所有的word进程
    2、没有装如endnote之类的word插件程序,或者计算字数的文档中不包含该插件信息

    没有协议,免费试用,开放源码。嗯

    下载 download

    转载于:https://www.cnblogs.com/Seraph/archive/2008/09/23/1296814.html

    展开全文
  • 由于最近老婆大人需要统计大量word文档的字数,俺就抽时间写了一个统计多个word文档字数的小程序。读取word文件的字数(或字符数),首选需要引用word对象和excel对象。//打开多个word文件,获取字数Word.Application...
  • pdf文档统计字数的问题

    万次阅读 2015-10-06 10:09:21
    1 问题以前也遇到过这样的问题,总是采用笨方法,即将pdf文档中的内容拷贝到word中,利用word中的字数统计功能得知pdf文档的当前总字数。这种“曲线救国”的方式,我总感觉太麻烦,认为应该存在更加简单的方法。可是...
  • Word文档合并:将多种类型的多个Word文档合并为一个文档; Word文档类型批量转换:将多种文件类型的多个文档转换为指定类型的文档; Word文档批量打印及页面设置:一次打印多个文档或批量进行(打印)页面设置; ...
  • 有一件事我错过了,但是,是一状态栏有一持久的字数这让我保留一只眼睛在我工作的文章的字数限制。 为了提高我的谷歌文档的经验,我决定建立一只是喜欢它,和这里的如何。 欢迎建设和优化的谷歌浏览器的扩展...
  • 在本系列的上一期中,我们创建了一简单的Google Chrome扩展程序,该扩展程序为您打开的Google文档添加了一持久字计数器。 我们的扩展程序会检测它何时处于应激活的上下文中,并定期运行其自身的那部分,以帮助...
  • ms word插件安装失败Have you ever been writing a document for your editor or boss and they request that you insert a word count? Today we take a look at how to do it using Field Codes in Word 2010. 您...
  • Word文档一样,PDF文档也是有字数统计功能的,可以一键统计页面字数,而实现这功能需要借助工具。 首先用极速PDF编辑器打开PDF文档后,点击软件右上角“文档”即可看到字数统计工具。 设置好需要统计字数的文档...
  • 如题,实现文本字数统计,文本在D盘,名称是testfileA.txt 文本内容如下: 话不说,上程序: from pyspark import SparkContext sc = SparkContext("local", "wordcount") text_file = sc.textFile("D:/Python_...
  • 在本系列的上一期中,我们创建了一简单的Google Chrome扩展程序,该扩展程序为您打开的Google文档添加了一持久字计数器。 我们的扩展程序检测它何时处于应激活的上下文中,并定期运行其自身的那部分,以帮助其...
  • Word文档校对工具的使用方法教程:1、Word的Internet语法和拼写检查器在开始校对文档之前,您可以依靠Word的内部语法和拼写检查器。当您在文档中键入文本时,该工具会检查语法和拼写,但是您可以使用校对工具手动对...
  • 简单的word文档, 各有一表格:读取文档中的表格到列表(为演示只对单列表格操作):import docxdef 取表格(文件名):文件 = docx.Document(文件名)首表 = 文件.tables[0]值 = []for 行 in 首表.rows:for 格 in...
  • 想要快速的完成mac电脑上的文档字数统计,字数统计器WordCounter mac版是您的首先,该软件可以查看您的写作统计,如字数,字数,句数,行数,段数等简单而强大,别犹豫了来macz下载体验吧~ WordCounter软件介绍:...
  • 使用POI读取word文档内容

    万次阅读 2017-05-14 22:59:33
    读word doc文件2中方式 1.1 通过WordExtractor读文件(在WordExtractor内部进行信息读取时还是通过HWPFDocument来获取的。) 1.2 通过HWPFDocument读文件 ...在hwpf里面我们使用HWPFDocument来表示一个word doc文
  • word文档快捷键

    2007-12-31 19:06:00
    Alt+F4 关闭退出文件 Ctrl+N 基于NORMAL模板新建文档 Ctrl+O、Ctrl+F12、Alt+Ctrl+F2打开已有的文档或模板 Ctrl+P、Ctrl+Shift+F12 打印活动文档 Ctrl+F2、Alt+Ctrl+I 按打印效果显示 Ctrl+S、Shift+F12、Alt+Sh
  • 使用前,需要在word内插入一textbox1和一commandbutton1,然后去掉文档中的标点符号。笔者比较懒,未加入剔除标点的代码。 理论上下述代码可以统计999字符(含标点)的文本,如需增加文本数量,则只需要增加数...
  • 字数统计工具是做什么用的?在线字数查询工具可方便的统计出字符数。并且能够分别统计出中文汉字,英文字符,标点符号的个数。英文,数字:1字节=1字母。汉字:2字节=1和汉字。B(Byte,字节)是计算机中最...
  • 文件了,复制粘贴手都麻木了,还是搞代码方便
  • 第 93 题 (1) 分 在 Windows 的中文输入方式下,中英文输入方式之间切换应按的键是 (Ctrl+Shift) 。第 91 题 (1) 分 在 Windows 中,文件名的长度最多可以达到 ( 255) 字符。单选题第 1 题 (1) 分 ...
  • 微软预览wordThe more you write, the bigger your file—but just how big can a Microsoft Word document be? The answer is, it depends. Text, video, and image content make all the difference when it comes...
  • 通过以下哪种方法可以修改保存文档的默认文件夹?A 在“选项”下,单击“保存”选项卡。 B 在“自定义”下,单击“选项”选项卡。 C 在“选项”下,单击“文件位置”选项卡。 D 在“自定义”下,单击“文件位置”选项...
  • Hadoop默认提供的字数统计示例运行

    千次阅读 2019-01-03 17:09:45
    从DFS拷贝文件到本地文件系统,文件匹配pattern,若是多个文件,则dst必须是目录 14. hadoop fs –get [-ignoreCrc] [-crc] <src> 顾名思义,从DFS拷贝多个文件、合并排序为一个文件到本地文件系统 15. hadoop fs ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,775
精华内容 1,110
关键字:

多个word文档字数统计