所以我在Qt 5.6中创建了一个Qt程序,用于读取和写入Excel文件(使用Qt Xlsx 0.3)。我想编辑一个drawing.xml文件,所以我使用QDomDocument这样做。我改变了一件事,来自:
<a:p>
<a:pPr rtl="0"/>
<a:r>
<a:rPr b="0" baseline="0" i="0" lang="en-GB" sz="1100">
<a:effectLst/>
<a:latin typeface="+mn-lt"/>
<a:ea typeface="+mn-ea"/>
<a:cs typeface="+mn-cs"/>
</a:rPr>
<a:t>J1: 0 </a:t>
</a:r>
</a:p>
到此:
<a:p>
<a:pPr rtl="0"/>
<a:r>
<a:rPr b="0" baseline="0" i="0" lang="en-GB" sz="1100">
<a:effectLst/>
<a:latin typeface="+mn-lt"/>
<a:ea typeface="+mn-ea"/>
<a:cs typeface="+mn-cs"/>
</a:rPr>
<a:t>TESTING</a:t>
</a:r>
</a:p>
我把它放回到图纸文件夹并压缩了xlsx文件,但是当我打开xlsx文件时,图纸已损坏并被删除。所以我使用了diffchecker来确保这些xml文件中的其他内容都是相同的,并注意到Qt也对它进行了一次更改。
来自:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
为:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
很好,无论如何,我将单引号编辑为双引号,现在差异检查器没有显示任何差异。我将此图形放回excel文件中并将其压缩,但是当我打开xlsx文件时,图形仍然被删除,因为它已损坏!
我认为编辑xml文件本身可能有问题,所以我尝试手动编辑drawing.xml文件。我做了之前显示的相同更改(只是&#34; TESTING&#34;并留下双引号),当我将其拉回到xlsx文件时没有问题!
我很困惑导致这个问题的原因是因为diff检查器显示xml文件之间没有差异,但是当我尝试将它们压缩成xlsx文件时,Qt以编程方式创建的文件是损坏的,而手编辑一个很好。可能是造成这个问题的原因是什么?
编辑:这是我正在运行的Qt代码:
QDomDocument doc;
QString temp;
int y, j;
QFile xml("C:/Users/dillo/Desktop/drawing2.xml");
if (!xml.open(QIODevice::ReadOnly)) {
qDebug() << "file didnt open";
}
if (!doc.setContent(&xml, false, &temp, &y, &j)) {
qDebug() << "Failed";
qDebug() << temp << " " << y << " " << j;
}
QDomNodeList items = doc.elementsByTagName("a:r");
QDomNode node = items.at(1);
QDomNodeList children = node.childNodes();
QDomElement newNodeTag = doc.createElement(QString("a:t"));
QDomText newNodeText = doc.createTextNode(QString("TESTING"));
newNodeTag.appendChild(newNodeText);
node.replaceChild(newNodeTag, children.at(1));
xml.close();
xml.open(QIODevice::WriteOnly);
QTextStream stream(&xml);
stream << doc.toString();
xml.close();