如何在 C# 中检查 Excel 文件的版本?

2023-12-01

我需要区分所选文件是使用所选 Excel 文件的 Excel 2010 或 Excel 2013 版本创建的,并且服务器上的 Excel 应用程序必须匹配才能继续。

我可以获得服务器的Excel应用程序版本:

 xApp = new Microsoft.Office.Interop.Excel.Application();
// getting version of Server's Excel Application
string versionName = xApp.Version;
int length = versionName.IndexOf('.');
versionName = versionName.Substring(0, length);
object missing = Type.Missing;
object trueObject = true;
xApp.Visible = false;
xApp.DisplayAlerts = false;
xWorkBook = 
xApp.Workbooks.Open(ExcelFilePath, missing, trueObject, 
                    missing, missing, missing,
                    missing, missing, missing,
                    missing, missing, missing, missing, missing, missing);

但是如何获取打开的 Excel 文件的 Excel 版本呢? 在目前的情况下,versionName回报14.0,适用于 Office 2010。


For .xls您需要解码“BIFF”值的文件,来自MSDN:如何确定 Microsoft Excel 工作簿的版本:

Microsoft Excel 使用结构化存储来保存数据。特别是,它创建一个名为“Workbook”(以前只是“Book”)的数据流,在其中保存以 BOF(文件开头)记录开始的内容。

那篇文章中还有一些代码,但我不确定在不侵犯版权的情况下我可以从中提取多少代码。

根据该文章底部的表格,该格式一直使用到 Excel 2002。

As for .xlsx文件,您可以使用任何 zip 文件库打开它,然后打开docProps\app.xml文件,在里面你会发现这个:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns=...>
    ....
    <AppVersion>15.0300</AppVersion>
</Properties>

这将告诉您保存该特定文件的 Excel 版本。

另请注意,Excel 会根据情况决定是使用新存储加载还是旧存储加载。contents的文件,而不仅仅是扩展名,因此您可以存储具有 .xlsx 扩展名的旧式文件和具有 .xls 扩展名的新式文件,Excel 仍会打开它,您也应该这样做。 Excel 会发出警告,但如何处理差异取决于您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中检查 Excel 文件的版本? 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 父子进程隔离和子进程列表

    请阅读以下模板 PID Status LPID 10 Closed 25 11 Open 25 31 Open 31 25 Closed 25 54 Open 31 17 Open 17 20 Closed 31 88 closed 77
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Scikit Learn 的 Keras 包装器 - AUC 评分器不起作用

    我正在尝试使用Keras Scikit 学习包装器以便更容易地随机搜索参数 我在这里写了一个示例代码 其中 我生成一个人工数据集 我在用moons from scikit learn from sklearn datasets import
  • mysql触发器怎么写

    有两张桌子表A 如果用户使用此查询 插入 A 值 abc 1 50 那么触发器应该检查 表B 中的student name 如果student name已经存在于 表B 中 那么 更新表 B 中的 all marks 字段 例如 all m
  • Kivy - 在 .py 文件中使用一个屏幕的 TextInput 中的文本到另一个屏幕

    我的第一个屏幕上有一个 TextInput 我想在第二个屏幕上的标签中使用收到的文本 我怎样才能做到这一点 由于可能有不同的玩家 我创建了一个玩家类 它为每个玩家存储一个名字和他 她的分数 在第二个屏幕中 我还尝试创建一个可以编辑点 标签文
  • 如何从文件中读取powershell表

    我在一个文件中有这样的内容 File Versions aaa 1 0 0 123 1 0 0 124 bbb 1 0 0 123 1 0 0 124 如何在powershell中将其读入表或类型数组 我已经通过以下脚本创建了该文件 ver
  • 将 javascript 函数注入到 Iframe 中

    这个链接 存档版本 描述了如何将脚本中的代码注入到 iframe 中 function injectJS var iFrameHead window frames myiframe document getElementsByTagName
  • 如何永远隐藏视图

    有人可以告诉我如何永远隐藏视图吗 我正在隐藏一个视图view setVisibility view GONE 但是当重新打开应用程序时 我必须重新隐藏视图 我希望在单击按钮时始终隐藏视图 直到清除应用程序数据或卸载 谢谢 您需要通过创建隐藏
  • LWP::UserAgent 和 500 SSL 协商失败

    我正在运行一个旧的 Debian 服务器 每天一次通过 Perl 脚本获取网页 从昨天开始 脚本失败并出现 500 SSL 协商失败 错误 use strict use LWP UserAgent my browserObj LWP Use
  • jQuery 验证插件:仅接受德文字母

    我正在寻找 jquery 验证插件的方法 http bassistance de jquery plugins jquery plugin validation 只接受字母 包括德语所谓的 Umlaute 我用谷歌搜索了一下 但不幸的是找不
  • 如何在控制台应用程序中添加 C# 登录尝试循环?

    我是这门语言的新手 我尝试了一些方法 但无法弄清楚如何设置登录循环以使用最大登录尝试次数 3次 有人可以帮我吗 static void Main string args Console WriteLine Status status Ona
  • 如何在按下按钮后在 JQuery / ASP.NET 中创建淡入淡出标签

    我认为这应该很容易 但我不太确定如何连接 我有一个页面 用户可以在其中定义查询 完成后 用户输入查询的名称并按下按钮 我想处理按钮单击 使文本标签 或跨度 可见几秒钟 然后让它淡出 由于它是回发 我可以将 ASP Label 控件变为可见
  • 仅从特定活动中读取 NFC 标签

    我先告诉你我在做什么 我按顺序进行了三项活动 活动1 gt gt 活动2 gt gt 活动3 现在 当我点击标签时 我只想从 Activity2 读取 NFC 标签 当我处于 Activity1 或 Activity3 中时 我的应用程序应
  • 如何将父组件注入子组件?

    我正在尝试将父组件注入子组件中 我认为这很简单 只需在子组件中指定 注入父组件constructor constructor private parent AppComponent child component constructor 我
  • 限制文本框中的数字和字母 - C#

    我想限制可以在文本框中输入的数字和字母 假设我只想允许数字 0 5 和字母 a d 小写和大写 我已经尝试使用屏蔽文本框 但它只允许我指定数字 字母 均无限制 或数字和字母一起但按特定顺序 最好的情况是 用户尝试输入数字 6 但文本框中没有
  • 使用 Trace 函数以 Haskell 的 do 表示法进行惰性求值

    我想知道为什么这个 调试消息 1 没有打印在这个片段中 import Debug Trace main do return trace debug message 1 trace debug message 2 return 第二个 调试消
  • 与新的导航堆栈结合时发现 @State 的奇怪行为 - 这是一个错误还是我做错了?

    我已将我的 swiftui 应用程序转换为新的导航栈以编程方式管理使用导航堆栈 路径 visibilityStack 这样做时 我发现 State 的意外行为让我认为视图没有正确关闭 事实上 当我用堆栈中的另一个视图替换该视图时 State
  • 如何通过选择随机变量在 Python 中执行随机事件?

    假设我必须变量 狗和猫 Dog 5 cat 3 我如何告诉 Python 随机选择这些变量之一并将其打印到屏幕上 import random print random choice dog cat 就是这么简单 choice 获取一个序列并
  • Pygame:尝试理解 Sprite 类

    我发现在Pygame 文档一个名为Sprite 我读了解释 但不明白这个类是用来做什么的 我知道我们用它来通过构造函数继承其他类 但仅此而已 如果有人有明确的解释用处班级的 以及如何用好 我有兴趣 是的 所以移动鼠标光标 那是一个精灵 它是
  • 内部服务器错误[重复]

    这个问题在这里已经有答案了 我正在开发一个短信发送应用程序 出于登录目的 我想使用 POST 方法将用户名和密码从我的 Android 应用程序发送到 Web 服务器 当我单击登录按钮时 应用程序没有响应 并且控制台打印以下消息来响应 Po
  • ReactJS:使用alert()获取用户输入

    我该如何使用alert 允许用户输入他们的名字并将其保存到状态 这是我到目前为止所做的尝试 render function return div div
  • 如何在 C# 中检查 Excel 文件的版本?

    我需要区分所选文件是使用所选 Excel 文件的 Excel 2010 或 Excel 2013 版本创建的 并且服务器上的 Excel 应用程序必须匹配才能继续 我可以获得服务器的Excel应用程序版本 xApp new Microsof