我正在尝试向已经包含标题 (header1.xml) 的 docx (office 2010) 文档添加一个新标题(通过使用 openxml 代码手动添加)。我尝试使用 openxml 添加一个名为 myheader.xml 的文件,其中只有一个段落。在word打开文档时,header1的内容出现在与之前不同的位置(低2行)。
当我删除该段落时,(仅<w:hdr> </w:hdr>使用相关的名称空间)header1 的内容仍显示在不同的药水中(仅低 1 行)
这个问题有解决方案吗?
我正在使用 OpenXML 将文本添加到段落节点。我正在包装 OpenXML 方法,并有以下方法来附加文本,这对没有标记的文本工作正常。
public void AddPlainParagraphText(string text)
{
m_wordprocessingDocument.MainDocumentPart.Document.Body.AppendChild(
new Paragraph(
new Run(
new Text(text))));
}
Run Code Online (Sandbox Code Playgroud)
我知道对于制表符等特殊字符,您需要使用 OpenXML 的TabChar类并将其附加到 Text 项。我试图弄清楚我是否可以让这个自动化,OpenXML 会在文本中看到 '\t',并自动设置 XML 以通过 . 我想我可以用 \t 标记字符串,但是我必须搜索每种类型的标记字符。这可以自动完成吗?
我想获得正确的旋转值以从给定的 OOXML 数据绘制 MS office Powerpoint 2007 文件的形状,如下所示:
<p:sp>
<p:nvSpPr>
<p:cNvPr id="3" name="Rectangle 66" />
<p:cNvSpPr>
<a:spLocks noChangeArrowheads="1" />
</p:cNvSpPr>
<p:nvPr />
</p:nvSpPr>
<p:spPr bwMode="auto">
***<a:xfrm rot="5400000">***
<a:off x="2443049" y="-1042472" />
<a:ext cx="304800" cy="4419600" />
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst />
</a:prstGeom>
<a:ln>
<a:headEnd />
<a:tailEnd />
</a:ln>
</p:spPr>
Run Code Online (Sandbox Code Playgroud)
旋转值指定为“xfrm rot = 5400000”。考虑到这一点,必须计算其适当的值,因此必须处理形状的高度和宽度以绘制形状。
所以我正在编写一个 pptx 解析器并使用 OpenXML 来加载数据。一切都进行得很顺利(这是谎言 - 我实际上已经准备好将计算机扔到房间里然后跳出窗口),但是我我在加载视频时遇到了一个我根本无法弄清楚的问题。问题是 OpenXML 似乎无法定位指定视频 URI 的关系标记。
我所做的是编写代码来循环浏览幻灯片中的各个部分并注销它们的 ID,如下所示:
SlidePart slidePart = ...;
foreach(var curPart in slidePart.Parts)
Console.WriteLine("Part ID: " + curPart.RelationshipId);
Run Code Online (Sandbox Code Playgroud)
这样效果很好 - 它注销了 slide.xml.rels 文件中指定的所有关系 - 除了相关文件的视频关系。我可以在 rels 文件中看到视频关系,它与幻灯片中的 videoFile 标签的链接 ID 匹配,但我不知道如何通过代码获得它。我的图像加载工作正常(OpenXML 可以找到图像关系)。视频关系是否与其他关系不同?如何获取视频 URI?
这个想法很简单,但答案可能会变得复杂:
事实上,我可以检查字体大小的运行属性。
如果不存在,我需要检查应用于段落的样式以找到为字体大小定义的运行属性,然后是该样式的段落运行属性。
如果没有找到,我需要再次检查有关此样式所基于的样式的所有内容。
如果没有找到,我应该检查样式层次结构中的以下样式,然后继续直到达到默认样式。
我还需要检查上一段是否应用了样式。在这种情况下,应用的样式可以定义影响我正在处理的文本的下一段的样式。
如果没有样式影响我的段落,那么我需要查看样式部分的默认运行属性。之后,我应该查看同一部分中的默认段落属性。
如果什么都不适用,那么大小定义的责任就交给处理文档的应用程序。
我对吗?
我没有来自 OPenXML SDK 和/或 OpenXmlPowerTools 的任何帮助吗?
一个重要的方面是,除了文本字体大小之外,这个问题几乎扩展到任何段落或运行属性。
我的最终目标是根据格式确定一段文本是否是节标题(如heading1、heading2 等),但看起来很难得到像“一段文本的当前格式”这样简单的东西。为了让事情变得更难,我还需要处理(部分)编号,很多时候没有应用于段落的编号格式。
谢谢,
请澄清我的疑问
WordML/DOCX默认单位测量是像素或点或EMU或英寸..?
我正在使用openXMLAsp.net和c#创建一个Excel workbook,我要求使所有工作表的抬头行都应为粗体。
WorkbookStylesPart stylesPart = workbookpart.AddNewPart<WorkbookStylesPart>();
stylesPart.Stylesheet = CreateStylesheet();
stylesPart.Stylesheet.Save();
}
private static Stylesheet CreateStylesheet()
{
Stylesheet ss = new Stylesheet();
Fonts fts = new Fonts();
DocumentFormat.OpenXml.Spreadsheet.Font ft = new DocumentFormat.OpenXml.Spreadsheet.Font();
Bold fbld = new Bold();
FontName ftn = new FontName();
ftn.Val = "Calibri";
DocumentFormat.OpenXml.Spreadsheet.FontSize ftsz = new DocumentFormat.OpenXml.Spreadsheet.FontSize();
ftsz.Val = 11;
ft.FontName = ftn;
ft.FontSize = ftsz;
ft.Bold = fbld;
fts.Append(ft);
fts.Count = (uint)fts.ChildElements.Count;
ss.Append(fts);
return ss;
}
Run Code Online (Sandbox Code Playgroud)
它正在制作所有单元格bold,我缺少将其应用于特定单元格的代码row/cells
在此先感谢,AR
我有很多使用扩展XML保存的Office Open XML(OOXML)文件,我试图将这些文件插入到MySQL数据库中.我可以连接好,我已经能够使用相同的语法将字符串插入到不同的数据库中.但是当我尝试将XML文件插入数据库中的blob字段时,它告诉我我的语法有问题.由于文件的格式,我应该做些什么特别的事吗?
public Insertion(Connection conn) throws SQLException, FileNotFoundException{
System.out.println("Trying to insert Data..");
String filePath1 = "C:/Users/SAVAGD05/Documents/RMP/Section1.XML";
InputStream inputStream1 = new FileInputStream(new File(filePath1));
String filePath2 = "C:/Users/SAVAGD05/Documents/RMP/Section1.XML";
InputStream inputStream2 = new FileInputStream(new File(filePath2));
String filePath3 = "C:/Users/SAVAGD05/Documents/RMP/Section1.XML";
InputStream inputStream3 = new FileInputStream(new File(filePath3));
System.out.println("It did this part");
String SQL = "INSERT INTO (1,2,3) values(?,?,?)";
PreparedStatement statement = conn.prepareStatement(SQL);
statement.setBlob(1, inputStream1);
statement.setBlob(2, inputStream2);
statement.setBlob(3, inputStream3);
statement.executeUpdate();
System.out.println("Data inserted.");
conn.close();
System.out.println("Connection Closed");
System.out.println("Have a Nice Day and Goodbye.");
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
"线程中的异常"主" …
使用OpenXML SDK将边框应用于合并的单元格区域时,边框仅显示合并范围中的第一个(左上角)单元格.我完全不知道,这让我发疯.使用生产力工具,我找不到任何有意义的差异,我有什么和预期的工作.这是我为样式表生成的XML:
<x:borders count="2" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:border>
<x:left />
<x:right />
<x:top />
<x:bottom />
<x:diagonal />
</x:border>
<x:border>
<x:left />
<x:right />
<x:top />
<x:bottom style="thick">
<x:color auto="1" />
</x:bottom>
<x:diagonal />
</x:border>
</x:borders>
<x:cellXfs xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:xf fontId="0" />
<x:xf fontId="1" fillId="2" applyFont="1" applyFill="1" />
<x:xf borderId="1" applyBorder="1" />
</x:cellXfs>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切,在边界之前,之后等应用合并.
下面给出了一个合并功能,该功能旨在合并文件夹中的所有docx文件并生成合并的文件。
public void Merge()
{
try
{
string sid = Request.QueryString["studid"];
string stud = sid.ToString();
string ds = HttpContext.Current.Server.MapPath(("~\\StudentBinder") + "\\Temp4\\");
if (Directory.Exists(ds))
{
DirectoryInfo d = new DirectoryInfo(ds);
FileInfo[] Files = d.GetFiles("*" + stud + "*.docx");
// stud added for differentiating b/w users
string[] filepaths = new string[Files.Length];
int index = 0;
foreach (FileInfo file in Files)
{
filepaths[index] = file.Name;
index++;
}
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(Server.MapPath(filepaths[0]), true))
{
for (int i = 1; i < filepaths.Length; i++) …Run Code Online (Sandbox Code Playgroud)