区分wps还是office创建的文档,word、ppt和excel

news2024/11/15 23:39:22

手动区分

文档->右键->属性
在这里插入图片描述
在这里插入图片描述

代码实现

namespace WpsAndOfficeDifferent
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string root = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase ?? "";
            #region 区分office和wps创建的doc和docx文件
            //Console.WriteLine(GetWordAppName(Path.Combine(root,"Word","office.doc")));
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "wps.doc")));
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "office.docx")));
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "wps.docx")));
            //Console.WriteLine("使用wps修改office word");
            office创建的doc,wps修改也不会改变,docx会改变
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "office2wps.doc")));
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "office2wps.docx")));
            //Console.WriteLine("使用office修改wps word");
            wps创建的doc,office修改也不会改变,docx会改变
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "wps2office.doc")));
            //Console.WriteLine(GetWordAppName(Path.Combine(root, "Word", "wps2office.docx")));

            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "office.doc")));
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "wps.doc")));
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "office.docx")));
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "wps.docx")));
            Console.WriteLine("使用wps修改office word");
            //office创建的doc,wps修改也不会改变,docx会改变
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "office2wps.doc")));
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "office2wps.docx")));
            Console.WriteLine("使用office修改wps word");
            //wps创建的doc,office修改也不会改变,docx会改变
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "wps2office.doc")));
            Console.WriteLine(GetWordAppNameByAspose(Path.Combine(root, "Word", "wps2office.docx")));
            #endregion

            #region 区分office和wps创建的xls和xlsx
            //Console.WriteLine(GetExcelAppName(Path.Combine(root,"Excel", "office.xls")));
            //Console.WriteLine(GetExcelAppName(Path.Combine(root, "Excel", "wps.xls")));
            //Console.WriteLine(GetExcelAppName(Path.Combine(root, "Excel", "office.xlsx")));
            //spire.xls不支持读取wps创建的xlsx
            //Console.WriteLine(GetExcelAppName(Path.Combine(root, "Excel", "wps.xlsx")));
            //xls能区分谁创建的,xlsx wps创建会多一些自定义属性,
            //但是wps修改office也会多wps自定义属性,ApplicationName一样
            //wps和office的xlsx格式兼容区分不出来影响不大
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "office.xls")));
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "wps.xls")));
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "office.xlsx")));
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "wps.xlsx")));
            Console.WriteLine("使用wps修改office excel");
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "office2wps.xls")));
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "office2wps.xlsx")));
            Console.WriteLine("使用office修改wps excel");
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "wps2office.xls")));
            Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "Excel", "wps2office.xlsx")));
            #endregion

            #region 区分office和wps创建的ppt和pptx
            //ppt能区分谁创建的,修改了不会改变
            //pptx能区分谁创建的,但是谁修改了就变成对应的那个应用程序

            //Console.WriteLine(GetPptAppName(Path.Combine(root, "PPT", "office.ppt")));
            //Console.WriteLine(GetPptAppName(Path.Combine(root, "PPT", "wps.ppt")));
            //Console.WriteLine(GetPptAppName(Path.Combine(root, "PPT", "office.pptx")));
            //Console.WriteLine(GetPptAppName(Path.Combine(root, "PPT", "wps.pptx")));
            //Console.WriteLine("使用wps修改office ppt");
            //Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "PPT", "office2wps.ppt")));
            //Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "PPT", "office2wps.pptx")));
            //Console.WriteLine("使用office修改wps ppt");
            //Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "PPT", "wps2office.ppt")));
            //Console.WriteLine(GetExcelAppNameByAspose(Path.Combine(root, "PPT", "wps2office.pptx")));

            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "office.ppt")));
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "wps.ppt")));
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "office.pptx")));
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "wps.pptx")));
            Console.WriteLine("使用wps修改office ppt");
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "office2wps.ppt")));
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "office2wps.pptx")));
            Console.WriteLine("使用office修改wps ppt");
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "wps2office.ppt")));
            Console.WriteLine(GetPptAppNameByAspose(Path.Combine(root, "PPT", "wps2office.pptx")));

            #endregion
            Console.Read();
        }

        /// <summary>
        /// 区分wrod
        /// </summary>
        /// <param name="docPath"></param>
        static string GetWordAppName(string docPath)
        {
            //创建一个Document实例
            using var doc = new Spire.Doc.Document();
            //加载一个现有Word文档
            doc.LoadFromFile(docPath);
            var appName = doc.BuiltinDocumentProperties.ApplicationName;
            return appName;
            //获取摘要
            //Console.WriteLine("摘要\n");
            //Console.WriteLine("标题: " + doc.BuiltinDocumentProperties.Title);
            //Console.WriteLine("主题: " + doc.BuiltinDocumentProperties.Subject);
            //Console.WriteLine("作者: " + doc.BuiltinDocumentProperties.Author);
            //Console.WriteLine("主管: " + doc.BuiltinDocumentProperties.Manager);
            //Console.WriteLine("单位: " + doc.BuiltinDocumentProperties.Company);
            //Console.WriteLine("类别: " + doc.BuiltinDocumentProperties.Category);
            //Console.WriteLine("关键字: " + doc.BuiltinDocumentProperties.Keywords);
            //Console.WriteLine("备注: " + doc.BuiltinDocumentProperties.Comments);
            //Console.WriteLine("修订号: " + doc.BuiltinDocumentProperties.RevisionNumber);
            //Console.WriteLine("程序名称:" + doc.BuiltinDocumentProperties.ApplicationName);
            //获取自定义属性
            //Console.WriteLine("\n自定义属性\n");
            //for (int i = 0; i < doc.CustomDocumentProperties.Count; i++)
            //{
            //    Console.WriteLine(doc.CustomDocumentProperties[i].Name + ": " + doc.CustomDocumentProperties[i].Value);
            //}
        }

        /// <summary>
        /// 区分wrod
        /// </summary>
        /// <param name="docPath"></param>
        static string GetWordAppNameByAspose(string docPath)
        {
            //创建一个Document实例
            var doc = new Aspose.Words.Document(docPath);
            var appName = doc.BuiltInDocumentProperties.NameOfApplication;
            return appName;
        }

        /// <summary>
        /// 区分excel
        /// </summary>
        /// <param name="excelPath"></param>
        /// <returns></returns>
        static string GetExcelAppName(string excelPath)
        {
            //创建一个Document实例
            using var workbook = new Spire.Xls.Workbook();
            //加载一个现有Word文档
            workbook.LoadFromFile(excelPath);
            var appName = workbook.DocumentProperties.ApplicationName;
            return appName;
        }

        /// <summary>
        /// 区分excel
        /// </summary>
        /// <param name="excelPath"></param>
        /// <returns></returns>
        static string GetExcelAppNameByAspose(string excelPath)
        {
            using var workbook = new Aspose.Cells.Workbook(excelPath);
            var appName = workbook.BuiltInDocumentProperties.NameOfApplication;
            //foreach (var item in workbook.CustomDocumentProperties)
            //{
            //    Console.WriteLine(item.Name);
            //    Console.WriteLine(item.Value);
            //}
            var isWpsCreate = workbook.CustomDocumentProperties.Any(p => p.Name.Equals("KSOProductBuildVer"));
            if (isWpsCreate)
            {
                Console.WriteLine("wps创建");
            }
            return appName;
        }

        /// <summary>
        /// 区分wrod
        /// </summary>
        /// <param name="pptPath"></param>
        static string GetPptAppName(string pptPath)
        {
            //创建一个PPT实例
            using var ppt = new Spire.Presentation.Presentation();
            //加载一个现有PPT文档
            ppt.LoadFromFile(pptPath);
            var appName = ppt.DocumentProperty.Application;
            return appName;
        }

        /// <summary>
        /// 区分wrod
        /// </summary>
        /// <param name="pptPath"></param>
        static string GetPptAppNameByAspose(string pptPath)
        {
            //创建一个Document实例
            var ppt = new Aspose.Slides.Presentation(pptPath);
            var appName = ppt.DocumentProperties.NameOfApplication;
            return appName;
        }
    }
}

在这里插入图片描述

结论

总结,如果是之查看不修改,则不会改变创建的应用
doc、xls、ppt这种以前的格式,只会保留创建的应用,即使其他的程序修改了也不会改变
docx、xlsx和pptx这种如果有新的软件修改则记录新的修改软件
wps xlsx和office的格式一致,通过applicationname没法区分,
wps创建或者修改过就会多一个属性KSOProductBuildVer,即使office再次改变还是会有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SELF-INSTRUCT: Aligning Language Modelswith Self-Generated Instructions 学习

指令微调就是要训练模型执行用户的要求的能力。 文章首先说“指令微调”数据集经常是人工生成&#xff0c;有数量少等缺点。文章提供了一个让语言模型自己生成指令微调数据&#xff0c;自己学习的方法。首先会让一个语言模型自己生成要求&#xff0c;输入和输出&#xff0c;然…

【SpringBoot】电脑商城-09-默认收获地址和删除收货地址

默认收货地址 1 默认收货地址-持久层 1.1 规划需要执行的SQL语句 1.将某用户的所有收货地址设置为非默认地址&#xff08;是否默认&#xff1a;0-不默认&#xff0c;1-默认&#xff09;。 update t_address set is_default0 where uid?2.将某用户指定的收货地址设置为默认…

108页PPT分享:华为流程体系及实施方法最佳实践

PPT下载链接见文末~ 华为的流程体系、流程框架及实施方法是一个复杂而精细的系统&#xff0c;旨在确保公司运作的高效性和竞争力。以下是对这些方面的详细描述&#xff1a; 一、华为的流程体系 华为的流程体系是一套全面的管理体系&#xff0c;它涵盖了企业所有的活动&#…

玩转云服务:Oracle Cloud甲骨文永久免费云主机配置指南(续)

前段时间&#xff0c;和大家分享了白嫖Oracle Cloud的云服务器&#xff1a; 玩转云服务&#xff1a;Oracle Cloud甲骨文永久免费云服务器注册及配置指南。 新注册的小伙伴&#xff0c;可以在 30 天内&#xff0c;利用 300 美元免费储值&#xff0c;任性使用所有 Oracle Cloud …

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器

最终效果 前言 使用CharacterController实现3d角色控制器&#xff0c;之前已经做过很多了&#xff1a; 【unity小技巧】unity最完美的CharacterController 3d角色控制器&#xff0c;实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果&#xff0c;复制粘贴即用 【unity实战】C…

InternLM2.5 部署到安卓手机上

环境准备 1.1 安装rust export RUSTUP_DIST_SERVERhttps://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOThttps://mirrors.ustc.edu.cn/rust-static/rustup curl --proto https --tlsv1.2 -sSf https://mirrors.ustc.edu.cn/misc/rustup-install.sh | sh1.2 安…

PostgreSQL 服务启动不了问题

如图&#xff0c;遇到这个问题&#xff0c;需要给文件夹打开权限即可。 先给主文件夹postgreSQL打开所有权限,点击属性->安全那里&#xff0c;所有修改啥的权限都打开。再给里面的data文件夹打开权限。

开源搜索引擎之Solr

Apache Solr 是一个开源的企业级搜索平台&#xff0c;构建在 Apache Lucene 之上&#xff0c;提供了强大的全文搜索、实时索引和分布式搜索能力。Solr 被广泛用于构建高性能的搜索应用程序&#xff0c;支持从简单的搜索引擎到复杂的数据分析平台等多种场景。以下是对 Apache So…

1panle搭建的maxkb增加本地向量模型

首先下载模型&#xff0c;比如m3e-large&#xff0c;并上传到/opt/maxkb/model/local_embedding/ 目录&#xff0c;没有就创建 目录如下&#xff1a; 然后修改1panel的容器信息&#xff0c;点击右边的编辑&#xff1a; 在下方的挂在目录处点击添加&#xff1a; 在两个框都输入…

ISIS路由渗透

/ 实验介绍: / 原理概述 在IS-IS网络中&#xff0c;所有的Level-2和Level-1-2路由器构成了一个连续的骨干区域。Level-1区域必须且只能与骨干区域相连&#xff0c;不同的Level-1区域之间不能直接相连。Level-1区域内的路由信息会通过Level-1-2路由器通报给Level-2区域&#x…

EmguCV学习笔记 C# 8.3 Grabcut法

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

爬取央视热榜并存储到MongoDB

1. 环境准备 在开始之前&#xff0c;确保你已经安装了以下Python库&#xff1a; pip install requests pymongo2. 爬取网页内容 首先&#xff0c;我们需要爬取央视热榜的网页内容。通过requests.get()方法&#xff0c;我们可以获取网页的HTML内容&#xff0c;并通过re.finda…

KEYSIGHT是德 Infiniium EXR系列 示波器

Infiniium EXR系列 示波器 苏州新利通 引言 概述 Infiniium EXR系列 出色的信号完整性让信号纤毫毕现 该系列的所有型号都集成了一个 10 位 ADC&#xff0c;并且在所有通道上同时提供 16 GSa/s 的采样率。高分辨率 ADC 的效用取决于示波器的前端底噪是否足够低以提供与之匹…

Nvidia主导AI推理竞赛,但新兴对手纷纷崭露头角

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

健康早知道小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;健康信息管理&#xff0c;健康评估管理&#xff0c;在线留言&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;医学知识&#xff0…

【网络】数据链路层协议——以太网,ARP协议

1.局域网转发 &#xff08;1&#xff09;IP提供了将数据包跨网络发送的能力&#xff0c;这种能力实际上是通过子网划分目的ip查询节点的路由表来实现的&#xff0c;但实际上数据包要先能够在局域网内部进行转发到目的主机&#xff0c;只有有了这个能力之后&#xff0c;数据包才…

【问题分析】放大镜影响权限弹窗接收事件【Android14】

1 问题描述 如图&#xff0c;打开google的放大镜功能&#xff0c;然后将该放大镜和权限弹窗部分重合&#xff0c;会发现权限弹窗的按钮如“Allow”&#xff0c;点击无响应。 顺便一提&#xff0c;如果放大镜和权限弹窗完全重合或者完全不重合&#xff0c;是没问题的。 2 问题…

create-react-app 移除 ESLint 语法检查

ESLint 的作用&#xff1a; ESLint 是一个流行的 JavaScript 代码静态检查工具&#xff0c;旨在帮助开发者识别和修复代码中的问题。以下是关于 ESLint 的一些关键信息&#xff1a; 主要功能&#xff1a; 1.代码风格检查&#xff1a;ESLint 可以检查代码是否符合特定的编码风…

基于STM32开发的智能农业监测与控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理自动灌溉与环境控制数据融合与决策算法OLED显示与状态提示Wi-Fi通信与远程监控应用场景 温室环境的智能监控与自动化控制农田土壤与作物生长的实时监测常见问题…

2017年系统架构师案例分析试题四

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(9 分) 【问题 3】(7 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于数据库设计的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某制造企业为拓展网上销售业…