openxml获取xlsx的Excel.Validation

在 Open XML SDK 中,无法直接使用 Excel.RangeExcel.Validation,因为这是 VSTO (Visual Studio Tools for Office) 的概念,而不是 Open XML SDK 的概念。Open XML SDK 提供了对 Office Open XML (OOXML) 文件格式的低级访问,而不是对 Excel 对象模型的高级封装。

如果你要优化代码并提升性能,可以考虑采用更有效率的方式获取数据验证信息,而不是使用类似于 VSTO 中的 Excel.RangeExcel.Validation 的方式。以下是一种可能的优化方式:

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;// ...private static void CheckValidationValue(string filePath, int column, int rowIndex, ref List<int> columEvaluationList)
{using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filePath, false)){WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); // 假设只有一个工作表// 获取列的字母表示(A、B、C、...)string columnLetter = ExcelOperate.ExcelColumnFromNumber(column);// 获取目标单元格引用string targetCellReference = columnLetter + rowIndex;// 获取指定单元格的数据验证DataValidations dataValidations = worksheetPart.Worksheet.Descendants<DataValidations>().FirstOrDefault();if (dataValidations != null){foreach (DataValidation dataValidation in dataValidations.Elements<DataValidation>()){if (ValidationCoversCell(dataValidation, targetCellReference)){// 获取目标单元格的值string cellValue = GetCellValue(worksheetPart, targetCellReference);// 获取输入信息string inputMessage = dataValidation.PromptTitle.Text;if (!string.IsNullOrEmpty(inputMessage) && inputMessage.Contains("估值未完成")){columEvaluationList.Add(rowIndex);break;}}}}}
}private static string GetCellValue(WorksheetPart worksheetPart, string cellReference)
{Cell cell = worksheetPart.Worksheet.Descendants<Cell>().FirstOrDefault(c => c.CellReference.Value == cellReference);return cell != null ? cell.CellValue.Text : null;
}private static bool ValidationCoversCell(DataValidation dataValidation, string cellReference)
{var sqref = dataValidation.SequenceOfReferences.Text;var cellRefs = sqref.Split(' ');foreach (var cellRef in cellRefs){if (IsCellInRange(cellReference, cellRef)){return true;}}return false;
}private static bool IsCellInRange(string targetCellReference, string range)
{var rangeParts = range.Split(':');if (rangeParts.Length == 2){string startCell = rangeParts[0];string endCell = rangeParts[1];return string.Compare(targetCellReference, startCell, StringComparison.OrdinalIgnoreCase) >= 0 &&string.Compare(targetCellReference, endCell, StringComparison.OrdinalIgnoreCase) <= 0;}return false;
}

这里使用 GetCellValue 方法直接获取指定单元格的值,而不是通过 Excel.Range。这种方式更直接,可能更高效。请根据实际情况进行测试和调整。

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

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

相关文章

Docker上部署LPG(loki+promtail+grafana)踩坑复盘

Docker上部署LPG&#xff08;lokipromtailgrafana&#xff09;踩坑复盘 声明网上配置部署踩坑 声明 参考掘金文章&#xff1a;https://juejin.cn/post/7008424451704356872 版本高的用docker compose命令&#xff0c;版本低的用docker-compose 按照文章描述&#xff0c;主要准备…

Windows下PostgreSQL安装教程

一、下载 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

自动化测试框架有哪些?

前言 自动化测试常用的Python框架有哪些&#xff1f;常用的框架有Robot Framework、Pytest、UnitTest/PyUnit、Behave、Lettuce。Pytest、Robot Framework和UnitTest主要用于功能与单元测试&#xff0c;Lettuce和Behave仅适用于行为驱动测试。 一、Robot Framework Python测…

ASE 2023 Paper

1 CertPri: Certifiable Prioritization for Deep Neural Networks via Movement Cost in Feature Space. &#xff08;CertPri&#xff1a;通过特征空间中的移动成本对深度神经网络进行可认证的优先级排序。&#xff09; 2 Nuances are the Key: Unlocking ChatGPT to Find F…

3.8Code

基于顺序存储结构的图书信息表的新图书的入库 #include<iostream> #include<stdlib.h> #include<string.h>typedef int status;#define OK 1using namespace std;typedef struct{char no[50];char name[50];float price; }Book;typedef struct{Book* elem;i…

21世纪信息产业发展趋势与挑战

本报告旨在深入探讨21世纪信息产业的发展趋势与挑战。首先&#xff0c;通过分析信息技术的进步、互联网的普及和数字化的趋势&#xff0c;阐述了信息产业在各个领域的快速发展和深刻变革。其次&#xff0c;报告指出了信息产业面临的挑战&#xff0c;如信息安全、隐私保护和网络…

CTP-API开发系列之七:下报撤单及回报顺序

CTP-API开发系列之七&#xff1a;报撤单及回报顺序 前情回顾相关函数相关术语报单回报成交回报错单响应错单回报 重要序号RequestIDFrontIDSessionIDOrderRefExchangeID TraderID OrderLocalIDExchangeID OrderSysID 报单场景 前情回顾 CTP-API开发系列之一&#xff1a;各版…

Ducci Sequence(UVA 1594)

网址如下&#xff1a; Ducci Sequence - UVA 1594 - Virtual Judge (vjudge.net) 上乡村振兴概论&#xff0c;奖励自己一题 乐 一道set容器题&#xff0c;其中变成0的判断是利用了数组的每个数的总和&#xff08;毕竟每个数都大于或等于0&#xff09; 数组在原来的基础上&a…

计网(复习)黑书

1.整体概述 1.1 什么是Internet 从构成角度&#xff1a; 节点&#xff1a;主机端系统&#xff0c;及其运行的应用程序&#xff1b;路由器、交换机等网络交换设备 边&#xff1a;通信链路&#xff08;同轴电缆、光纤、无线电、卫星&#xff1b;传输速度带宽&#xff08;bps&am…

JEPs Part I

JEP 11 https://openjdk.java.net/jeps/11 JEP 11&#xff08;Java Enhancement Proposal 11&#xff09;提出了“孵化模块”的概念&#xff0c;这是一种将非最终版本的API和非最终工具提供给开发者的方法&#xff0c;以便在将来的版本中进行最终化或删除。孵化模块的目的是在…

操作系统:进程优先级

目录 1.进程优先级 1.1.基本概念 1.2.其他概念 1.3.进程切换 2.解读Linux2.6内核进程的调度队列 1.进程优先级 1.1.基本概念 我们在日常生活中的经验&#xff0c;排队的本质就是确认优先级&#xff0c;排队的原因就是资源不足&#xff0c;需要进行分配。那么在内存资源有…

【论文速读】 | DeGPT:通过大语言模型优化反编译器输出

本次分享论文为&#xff1a;DeGPT: Optimizing Decompiler Output with LLM 基本信息 原文作者&#xff1a;Peiwei Hu, Ruigang Liang, Kai Chen 作者单位&#xff1a;中国科学院信息工程研究所&#xff1b;中国科学院大学网络空间安全学院 关键词&#xff1a;反向工程&…

Linux——进程信号(一)

目录 1、信号入门 1.1、技术应用角度的信号 1.2、注意 1.3、信号概念 1.4、用kill -l命令可以查看系统定义的信号列表 1.5、信号处理常见方式概览 2、产生信号 2.1通过终端按键产生信号 Core Dump 2.2、调用系统函数向进程发信号 2.3、由软条件产生信号 3、总结思考…

XS2100S:IEEE 802.3af/at 兼容、用电设备接口控制器,集成功率MOSFET V1.0.3

XS2100S&#xff1a;IEEE 802.3af/at 兼容、用电设备接口控制器&#xff0c;集成功率MOSFET V1.0.3 北京冠宇铭通 肖小姐 概述 XS2100S 为用电设备 (PD) 提供符合以太网供电 (PoE)系统 IEEE802.3af/at 标准的完整接口。 XS2100S 为 PD 提供检测信号、分级信号以及带有浪…

【面试题】JVM面试题及答案总结

JVM&#xff08;Java虚拟机&#xff09;是Java技术体系的核心&#xff0c;面试中经常会被问到与JVM相关的问题&#xff0c; 以下是一些典型的JVM面试题及答案概要&#xff1a; JVM的主要组成部分有哪些&#xff1f; 类加载器(ClassLoader)&#xff1a;负责从文件系统或网络等…

尚硅谷JavaScript高级学习笔记

01 准备 JavaScript中函数是对象。我们后续描述构造函数的内存模型时&#xff0c;会将构造函数称为构造函数对象。 02 数据类型 typeof 运算符来查看值的类型&#xff0c;它返回的是类型的字符串值 会做数据转换 03 相关问题 04数据_变量_内存 05相关问题1 06相关问题2 …

Typescript 哲学 morn on funtion

函数重载 overload 有一些编程语言&#xff08;eg&#xff1a;java&#xff09;允许不同的函数参数&#xff0c;对应不同的函数实现。但是&#xff0c;JavaScript 函数只能有一个实现&#xff0c;必须在这个实现当中&#xff0c;处理不同的参数。因此&#xff0c;函数体内部就…

2024蓝桥杯每日一题(前缀和)

一、第一题&#xff1a;壁画 解题思路&#xff1a;前缀和贪心枚举 仔细思考可以发现B值最大的情况是一段连续的长度为n/2上取整的序列的累加和 【Python程序代码】 import math T int(input()) for _ in range(1,1T):n int(input())s input()l math.ceil(len(s)/…

人工智能在日常生活中的应用

在我们的日常生活中&#xff0c;人工智能已经成为一种无处不在的力量&#xff0c;从智能家居到在线助手&#xff0c;再到高度个性化的服务和推荐&#xff0c;它无声地改变着我们的生活方式和习惯。随着技术的不断进步和普及&#xff0c;人工智能正以前所未有的速度和规模渗透到…

JVM-垃圾收集器G1

G1垃圾回收器 概述&#xff1a; 是一款面向服务器的垃圾收集器,主要针对配备多个处理器及大容量内存的机器. 以极高效率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.G1保留了年轻代和老年代的概念&#xff0c;但不再是物理隔阂了&#xff0c;它们都是&#xff08;可以不连…