读取微软三剑客的内容创建信息

在微软办公套件生成的文件里面(xlsx,docx,pptx文件),存放了文档内容的创建和修改信息(不同于文件创建和修改信息),包括内容创建者、创建时间、最后一次修改的时间和修改人。这些信息可以用文件管理器,右键-详细信息页面能查看到:

那么,我们怎么把这些信息读出来呢?

原理:

2007版以上的三剑客文件,实际上是压缩后的XML文件,这些信息保存在docProps/core.xml中。

该文件的内容大致如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties " 。。。>
    <dc:creator>ZJ1301</dc:creator>
    <cp:lastModifiedBy>ZJ1301-苏光杰</cp:lastModifiedBy>
    <dcterms:created xsi:type="dcterms:W3CDTF">2015-03-19T06:25:56Z</dcterms:created>
    <dcterms:modified xsi:type="dcterms:W3CDTF">2018-09-14T09:41:18Z</dcterms:modified>
</cp:coreProperties>

利用这一原理,我们将三剑客文件解压后,从docProps/core.xml中读取出来

以下是根据这一原理编写的函数

/// <summary>
        /// 读取文档的内容创建信息
        /// 支持microsoft2007版以上三剑客 xlsx, docx,pptx
        /// </summary>
        /// <param name="docxFile">microsoft2007版以上三剑客 xlsx, docx,pptx</param>
        /// <returns></returns>
        private CreateInfo GetCreateInfo(string docxFile)
        {

            CreateInfo info = new CreateInfo();
            using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile(docxFile))
            {
                zip.ExtractSelectedEntries("docProps/core.xml", Ionic.Zip.ExtractExistingFileAction.OverwriteSilently);
                string file = Path.Combine(Environment.CurrentDirectory, "docProps", "core.xml");
                if (File.Exists(file))
                {
                    XElement root = XElement.Load(file);
                    foreach (var e in root.Elements())
                    {
                        if (e.Name.LocalName == "creator") info.Creator = e.Value;
                        else if (e.Name.LocalName == "lastModifiedBy") info.LastModifiedBy = e.Value;
                        else if (e.Name.LocalName == "created") info.Created = DateTime.Parse(e.Value);
                        else if (e.Name.LocalName == "modified") info.Modified = DateTime.Parse(e.Value);
                    }
                    Directory.Delete(Path.GetDirectoryName( file), true);
                }
                return info;
            }
        }

        private class CreateInfo
        {
            public string Creator { get; set; }
            public string LastModifiedBy { get; set; }
            public DateTime Created { get; set; }
            public DateTime Modified { get; set; }
        }

代码中用到了DotNetZip, 需要引用NuGet寻找导入。

原文地址:https://www.cnblogs.com/ccjungle/p/11076151.html

时间: 2024-10-09 12:24:07

读取微软三剑客的内容创建信息的相关文章

开源ext2read代码走读之-如何读取MBR分区的内容

主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1).在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为"主引导记录"(MBR),其后是4个16字节的"磁盘分区表"(DPT),以及2字节的结束标志(55AA).因此,在使用"主引导记录"(MBR)这个术语的时候,需要根据具体情况判断其到底是

asp.net页面读取word文档内容显示

用asp.net实现对指定word文档内容的读取显示该如何实现?比如左边读取指定文件夹中所有的word文档,以文档的标题作为链接,点击文档标题则在右边某位置显示出该word文档中的内容(包括字体样式,图片显示等). 可以这样实现: 操作WORD配置说明 引入:Word的对象库文件“MSWORD.OLB”(word 2000为MSWORD9.OLB) 1.运行Dcomcnfg.exe 2.组件服务――计算机――我的电脑――DCOM配置――找到microsoft word 文档 3.点击属性 4.选

Web系统如何做到读取客户电脑MAC等硬件信息且兼容非IE浏览器

我们在实际Web应用中,可能会遇到“需要限定特定的电脑或用户才能使用系统”的问题. 对于一般情况来说,我们用得最多的可能是使用ActiveX控件的方法来实现,但此方案只适用于IE浏览器.为了能兼容不同的浏览器,如FireFox等,我们就需要考虑到一种比较通用的方法.此方法我们可以参考“在很多网站中,会在网页的某个地方给一个链接来直接启动QQ来聊天”.这种方法可以实现Web系统来调用客户端电脑的某个exe文件(前提是在客户端必须安装需调用的exe应用程序).QQ的解决方法是采用在OS中注册一种自定

Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav

C#读取excel文件的内容(使用DataSet)

C#读取Excel文件的内容,通过OLEDB来连接,关键是连接的路径,如:string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;";      连接的路径涉及3方面: 1. Provider:使用的是OLEDB连接,但是这个技术会不时更新,使用前查询最新的版本: 2. Data Source: 就是

qtp 读取excel单元格内容

qtp 读取excel单元格内容 Function GetExcelCells(ExcelPath,SheetName,SheetColumn,SheetRow) Set ExcelBook = CreateObject("Excel.Application") Set ExcelSheet = CreateObject("Excel.Sheet") Set myExcelBook = ExcelBook.WorkBooks.Open(ExcelPath) Set 

Winform读取文档。然后创建,奇数行保存一个文档,偶数行保存一个文档

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;using System.Text.RegularExpressions; namespace TextModify

PHP读取txt文件的内容并赋值给数组的代码

使用file_get_contents()获取txt文件的内容,然后通过explode()把获得的字符串转化为数组. 获得数组长度可以使用count()函数 <?php $file = 'keywords.txt'; $content = file_get_contents($file); //echo $content; $array = explode("\r\n", $content); //print_r($array); for($i=0; $i<count($a

使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta htt