c# - iPhone Numbers 应用程序上的 OpenXML 电子表格 xlsx 导致错误的行高
问题描述
在 C# .NET5 项目中,我使用 OpenXML SDK 生成电子表格文档:
<PackageReference Include="DocumentFormat.OpenXml" Version="2.11.3" />
我在 SAX 模式下工作。非常基本的东西,SpreadsheetDocumentType.Workbook
一个 WorkbookPart,一个 WorksheetPart,一个 Sheet/SheetData,一个 SharedStringTablePart。
然后我添加行和单元格元素。
我强制的唯一属性是“r”。行上的行号和单元格上的列名。
这是代码的快速预览:
public void StartRow()
{
var attributes = new List<OpenXmlAttribute>();
attributes.Add(new OpenXmlAttribute("r", null, rowNumber.ToString()));
_xmlWriter.WriteStartElement(new Row(), attributes);
}
public void EndRow()
{
_xmlWriter.WriteEndElement();
rowNumber++;
cellNumber = 1;
}
public void WriteCellText(string text, DataSourceType type)
{
var attributes = new List<OpenXmlAttribute>();
attributes.Add(new OpenXmlAttribute("r", "", GetExcelColumnName(cellNumber)));
if (type == DataSourceType.Numeric)
{
attributes.Add(new OpenXmlAttribute("t", null, "n"));
_xmlWriter.WriteStartElement(new Cell(), attributes);
_xmlWriter.WriteElement(new CellValue(text));
_xmlWriter.WriteEndElement();
}
else
{
var sharedIndex = InsertSharedStringItem(text, _sharedStringPart);
attributes.Add(new OpenXmlAttribute("t", null, "s")); // shared string
_xmlWriter.WriteStartElement(new Cell(), attributes);
_xmlWriter.WriteElement(new CellValue(sharedIndex.ToString()));
_xmlWriter.WriteEndElement();
}
}
private string GetExcelColumnName(uint columnNumber)
{
var dividend = columnNumber;
var columnName = string.Empty;
uint modulo;
while (dividend > 0)
{
modulo = (dividend - 1) % 26;
columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
dividend = ((dividend - modulo) / 26);
}
return columnName;
}
结果文档在 Windows 上的 Microsoft Excel、Android 上的 Microsoft Excel 和 Android 上的 Google Sheets 上显示得非常好。
但是当使用预装的“Numbers”应用在 iPhone 上打开时会出现问题。所有行都展开以占据屏幕的高度:
在 Android Excel 上,它正确显示:
知道是什么原因导致该 iPhone 应用程序上的单元格高度无效吗?是否有我应该在某处强制使用的属性?
解决方案
推荐阅读
- loops - 如何在 Julia 中实现递减 for 循环?
- ruby-on-rails - Rails:参数丢失或值为空:admin
- git - 如何撤消“git add --intent-to-add”
- swift - SwiftUI 选择器为所选项目和选择视图分隔文本
- python - AttributeError:“SpooledTemporaryFile”对象没有属性“resize”
- php - 在 Laravel 中执行之前的 Mysql 查询拦截
- node.js - 如何在消息中发送某个(例如第二次或第三次)提及
- amazon-web-services - 无法使用密钥对进行 SSH
- unity3d - Photon kick 从游戏中手动添加玩家
- node.js - MongoDB查询以获取所有文档的数组字段长度的总和