我目前正在用OpenXml手工构建一个Excel文件。我在添加床单的过程中,但是,我遇到了一个问题。我有一个循环,添加每个工作表的名称,但一旦它运行,我试图打开文件,我得到以下消息:
“我们发现‘文件ame.xlsx’中的一些内容有问题。你想让我们尽量恢复吗?如果您信任此工作簿的源,请单击是。"
我认为问题可能是因为我使用字符串变量添加了每张工作表的名称。当我把它拿出来,再加上别的东西,它就工作了。下面是我的代码,我在其中循环并添加我的工作表。
//Technology Areas
foreach (DataRow dr in techAreaDS.Rows)
{
var data = dr["TechAreaName"].ToString().Split('-');
var techArea = data[2].TrimStart();
var techAreaSheet = new Sheet { Id = workbookPart.GetIdOfPart(worksheetPart),
SheetId = sheetId, Name = techArea };
sheets.Append(techAreaSheet);
sheetId++;
}
我看到有人提到,单元格中的字符串可以转换成字符串,这是一个问题,但在这种情况下,字符串始终是字符串。任何帮助都将不胜感激。
编辑:我已经解决了问题。问题是Name属性的最大长度为31。我的一个项目有42长度,因此错误。我确实找到了一套很酷的代码来验证我的OpenXml。链接。
更新:奇怪的是,有人认为这个问题是关于找到一些代码来帮助验证我在做什么。不是。。。问题很清楚:为什么我在尝试命名工作表时遇到错误。虽然我找到了一些验证代码,但我并没有要求验证代码。
如果你想帮忙,请阅读问题,而不是假设我在问什么,如果你不知道我想回答什么,请问。。。
我已经解决了问题。问题是Name属性的最大长度为31个字符。我试图使用的文本有时会超过这个限制(一个有42个字符)。我还找到了一组非常酷的代码来验证我的Open Xml,以找出具体的问题。链接
为了找出导致此错误的问题,您需要验证生成的文档。
除了使用本文所述的内置验证方法(这并没有显示我发现的所有问题)之外,我建议您下载并安装Microsoft Office的Open XML SDK 2.5。
它包含Microsoft的Open XML SDK 2.5生产力工具,在这里非常有用:
>
创建损坏的XLSX文件的副本,并按照Microsoft Excel的建议应用修复程序(假设您有文件FileName_corrupt.xlsx
和FileName_fixed.xlsx
然后,运行微软的OpenXMLSDK2.5生产力工具,打开FileName\u corrupt。xlsx
,选择“比较文件”并指定第二个文件名。xlsx。这允许您比较两个文件的XML结构。
让微软的开放XML SDK 2.5生产力工具从两个文件中生成C#代码:首先打开它们,然后右键单击根级别并选择“反映代码”。这将创建C#代码,允许您生成相同的文件。保存两个C#代码版本(即:FileName_corrupt.cs和FileName_fixed.cs)
现在您可以通过Visual Studio比较差异:使用devenv.exe /diffFileName_corrupt.csFileName_fixed.cs
来比较它们,或者使用我创建的批处理文件来启动VS比较-这是Visual Studio中的一个隐藏功能,它允许比较两个不属于TFS的本地文件。
通过这种方式,您应该能够找出差异,并允许您修复代码。
注意:对于第一次验证,我建议使用验证代码。只有当它仍然失败时,才使用上述步骤。对于验证,您可以使用
public static string ValidateOpenXmlDocument(OpenXmlPackage pXmlDoc, bool throwExceptionOnValidationFail=false)
{
using (var docToValidate = pXmlDoc)
{
var validator = new DocumentFormat.OpenXml.Validation.OpenXmlValidator();
var validationErrors = validator.Validate(docToValidate).ToList();
var errors = new System.Text.StringBuilder();
if (validationErrors.Any())
{
var errorMessage = string.Format("ValidateOpenXmlDocument: {0} validation error(s) with document", validationErrors.Count);
errors.AppendLine(errorMessage);
errors.AppendLine();
}
foreach (var error in validationErrors)
{
errors.AppendLine("Description: " + error.Description);
errors.AppendLine("ErrorType: " + error.ErrorType);
errors.AppendLine("Node: " + error.Node);
errors.AppendLine("Path: " + error.Path.XPath);
errors.AppendLine("Part: " + error.Part.Uri);
if (error.RelatedNode != null)
{
errors.AppendLine("Related Node: " + error.RelatedNode);
errors.AppendLine("Related Node Inner Text: " + error.RelatedNode.InnerText);
}
errors.AppendLine();
errors.AppendLine("==============================");
errors.AppendLine();
}
if (validationErrors.Any() && throwExceptionOnValidationFail)
{
throw new Exception(errors.ToString());
}
if (errors.Length > 0)
{
System.Diagnostics.Debug.WriteLine(errors.ToString());
}
return errors.ToString();
}
随着
public static void ValidateExcelDocument(string fileName)
{
using (var xlsx = SpreadsheetDocument.Open(fileName, true))
{
ValidateOpenXmlDocument(xlsx);
}
}
稍加修改,您也可以轻松使用上面的代码进行Microsoft Word验证:
public static void ValidateWordDocument(string fileName)
{
using (var docx = WordprocessingDocument.Open(fileName, true))
{
ValidateOpenXmlDocument(docx);
}
}
问题内容: 我可以轻松删除子引用中的文件,但是如何从Firebase Storage中删除整个文件夹? 错误文件不存在。有任何想法吗? 问题答案: 长话短说,我们尚未实现递归(或文件夹)删除。 目前,我们建议将文件列表存储在另一个源(例如,实时数据库)中,并根据需要删除文件。您也可以在Firebase控制台(console.firebase.google.com)中执行这种删除。 将来,我们可能会
我用python编写了代码,打开了一个模板excel文件。每天午夜,它都会将模板复制到一个新的excel文件中,代码会在其中记录当天的数据。我的目标是使用pyinstaller创建一个包含我的代码和模板excel文件的可执行文件。 基本上,我希望能够打开模板excel文件,不管计算机是否包含该文件,通过捆绑excel文件到从pyInster获得的exe文件: 现在我打开excel文件,如下所示:
如何强制pyinstaller使用特定的。打包为exe时的jar文件? 我正在尝试生成一个使用tabla-py-lib的可执行文件。这个库需要一个jar文件tabla-1.0.1-jar-with-dependencies。jar,我的文件中有。py文件夹。这些是myfile中的一些修改。规格: 然而,错误仍然存在。当我从命令行运行我的代码时,函数read_pdf(),来自tabula-py,它使
我试图在团队将websphere配置文件设置为活动状态时实现云配置文件也被激活。 yaml文件 当我设置时,我收到以下错误
我只想有一个,将工作簿的内容写入应用程序中的文件中,并在此 excel 中创建多个工作表。我正在使用Apache POI来读取/写入我的excel。我有以下方法这样做 - 我在这里面临的问题是,每次我调用时,都会创建一个新文件,并且存量数据会被覆盖。我只想要一个文件,并且需要将新的工作表添加到我现有的文件中。我如何实现这一点?
问题内容: 我有2个excel文件,我想比较内容并突出显示差异。例如: 第一个档案… 有没有第三方图书馆可以做到这一点?或最好的方法是什么? 问题答案: 就像DaDaDom所说的那样,Apache POI是您想要的。您可以从此页面下载它。请注意,POI项目不是完全独立的,您可能需要下载一些额外的库。请遵循Apache POI网站上的说明。这是您的用法: 如果这是一个新文件,则可能需要先创建图纸才能