c# - 使用 Documentformat.OpenXML 在 c# 中验证 Excel 文件
问题描述
我在使用 DocumentFormat.OpenXML 验证 Excel 文件时收到此错误(“异常抛出:xunit.assert.dll 中的'Xunit.Sdk.EqualException'”)。我想使用 # 验证 excel 文件,我正在使用 DocumentFormat.OpenXML
using System;
using System.IO;
using System.IO.Packaging;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Validation;
using Xunit;
using P = DocumentFormat.OpenXml.Presentation;
using S = DocumentFormat.OpenXml.Spreadsheet;
using W = DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
namespace ExcelValidation2
{
class Program
{
static void Main(string[] args)
{
var excelFile = "ExcelValidation.xlsx";
var readFile = File.ReadAllBytes(excelFile);
using(MemoryStream ms = new MemoryStream())
{
ms.Write(readFile, 0, readFile.Length);
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(ms, true))
{
//var corePart = doc.CoreFilePropertiesPart;
//var appPart = doc.ExtendedFilePropertiesPart;
//doc.DeletePart(corePart);
//doc.DeletePart(appPart);
//doc.AddCoreFilePropertiesPart();
//doc.AddExtendedFilePropertiesPart();
//doc.AddCustomFilePropertiesPart();
//doc.AddDigitalSignatureOriginPart();
//doc.AddExtendedPart("realType", "contentType/xml", ".xml");
//var tnPart = doc.AddThumbnailPart(ThumbnailPartType.Jpeg);
//doc.DeletePart(tnPart);
//tnPart = doc.AddThumbnailPart("image/jpg");
OpenXmlValidator v = new OpenXmlValidator(DocumentFormat.OpenXml.FileFormatVersions.Office2013);
var errs = v.Validate(doc);
Assert.Equal(1, errs.Count());
}
}
}
}
}
解决方案
可以检查这个方法来验证:
private void ValidateExcel()
{
try
{
var validator = new OpenXmlValidator();
int count = 0;
foreach (ValidationErrorInfo error in validator.Validate(SpreadsheetDocument.Open(openFileDialog1.FileName, true)))
{
count++;
lblError.Text += ("Error Count : " + count) + "\r\n";
lblError.Text += ("Description : " + error.Description) + "\r\n";
lblError.Text += ("Path: " + error.Path.XPath) + "\r\n";
lblError.Text += ("Part: " + error.Part.Uri) + "\r\n";
}
Console.ReadKey();
}
catch (Exception ex)
{
lblError.Text += (ex.Message);
}
}
推荐阅读
- git - Mac,git:从 Bitbucket 而不是目录进行 git 克隆时,为什么我会得到一个应用程序/包?
- reactjs - 如何在涉及多个三元组的情况下动态更改类名?
- ruby-on-rails - 为什么十进制保持值像 0.219e3 而不是我想要的 219.0
- python - 将一个数字的所有更改为numpy数组中的另一个数字
- php - 编码问题特殊字符 csv 到 php
- c++ - ADL 在 constexpr 函数中不起作用(仅限 clang)
- r - ggplot2中同一分组箱线图上的多个变量*具有不同的选项*?
- c - 如何在运行它的程序仍在运行时清除文件数据的内存
- pandas - 熊猫 - 按出现顺序排列
- php - 指向外部样式表的链接在 php 中未按预期工作包括