我正在使用 OpenXML API 修改 docx 模板并遇到问题。
我需要将图像插入到某个位置 - 该位置由内容控制元素定义,该元素可以位于文档的主要部分、页眉或页脚中。
我得到这样的内容控制:
static IEnumerable<TElement> GetDecendants<TElement>(OpenXmlPart part) where TElement : OpenXmlElement
{
var result = part.RootElement
.Descendants()
.OfType<TElement>();
return result;
}
Run Code Online (Sandbox Code Playgroud)
稍后,我需要通过此管道将图像插入到文档的正确部分
internal static OpenXmlElement InsertImage(OpenXmlPart documentPart, Stream stream, string fileName, int imageWidth, int imageHeight)
{
// actual implementation that is tested and works
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,当我发现需要用图像替换的 ContentControl 元素时,我没有引用documentPart- 我只有引用 soSdtRun或SdtBlock。
有没有办法导航到documentPartfrom SdtRun?我已经检查过.Parent,但找不到从 到 的方法OpenXmlElement-OpenXmlPart这些位于不同的层次结构中。
我正在尝试将段落居中对齐,但对该段落没有任何影响。我正在使用 OpenXml。下面是代码:
//paragraph properties
ParagraphProperties User_heading_pPr = new ParagraphProperties();
//trying to align center a paragraph
Justification justification1 = new Justification() { Val = JustificationValues.Center };
// build paragraph piece by piece
Text text = new Text(DateTime.Now.ToString() + " , ");
Text text1 = new Text(gjenerimi + " , ");
Text text2 = new Text(merreshifren());
var run = new Run();
run.Append(text,text1,text2);
Paragraph newParagraph = new Paragraph(run);
User_heading_pPr.Append(justification1);
newParagraph.Append(User_heading_pPr);
Run Code Online (Sandbox Code Playgroud)
这是我尝试将段落居中对齐的方法。
我正在尝试查找 Word 文档中的所有 SdtElement。我使用了下面的代码:
using (var wordDoc = WordprocessingDocument.Open(FilePath, true))
{
var docSdts = wordDoc.MainDocumentPart.Document.Descendants<SdtElement>();
// MainDocumentPart.Document.Body.Descendants<SdtElement>(); also used but same result
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
List<SdtBlock> sdtList = mainPart.Document.Body.Descendants<SdtBlock>().ToList();
// process all sdt
}
Run Code Online (Sandbox Code Playgroud)
问题是上面的代码没有返回文件中的所有 SdtElements。在一份文档中有 19 个 SdtElement,但它只返回 7 个。
根据文档,后代方法应返回所有级别的元素:
Elements只查找那些直接后代元素,即直接子元素。vs Descendants查找任何级别的孩子,即孩子、孙子等...
观察到的一件事是仅返回body、para和表格单元格下的sdt ,但是当sdt位于表格单元格内的para下时,它不会返回。
如何从整个文档中获取所有 sdt 元素,无论嵌套级别如何?
我正在尝试学习如何使用 Microsoft 的 Open XML SDK。我按照他们关于如何使用 a 创建 Word 文档的步骤进行操作FileStream,效果非常好。现在我想创建一个Word文档,但仅在内存中,并等待用户指定是否要保存该文件。
Microsoft 的这份文档说明了如何使用 处理内存中的文档MemoryStream,但是,该文档首先从现有文件加载并“转储”到MemorySteam. 我想要的是完全在内存中创建文档(而不是基于驱动器中的文件)。我认为可以实现这一点的是这段代码:
// This is almost the same as Microsoft's code except I don't
// dump any files into the MemoryStream
using (var mem = new MemoryStream())
{
using (var doc = WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document, true))
{
doc.AddMainDocumentPart().Document = new Document();
var body = doc.MainDocumentPart.Document.AppendChild(new Body());
var paragraph = body.AppendChild(new Paragraph());
var run = paragraph.AppendChild(new Run());
run.AppendChild(new Text("Hello docx"));
using (var file …Run Code Online (Sandbox Code Playgroud) 我有一个xml,我希望它在SQL Server中使用OpenXML提取
这是示例XML
<row>
<student_token>7</student_token>
<student_ssn>552</student_ssn>
<alternate_id>20</alternate_id>
<old_ssn xsi:nil="true" />
<alien_num xsi:nil="true" />
<last_name>A</last_name>
<first_name>B</first_name>
<middle_init xsi:nil="true" />
<drivers_license_num xsi:nil="true" />
<gpa_highschool xsi:nil="true" />
<created_dt>2006-07-13T11:15:08.320</created_dt>
<created_how>4</created_how>
<modified_dt>2008-02-14T00:00:00</modified_dt>
<modified_by>4</modified_by>
<primary_street2 xsi:nil="true" />
<primary_street3 xsi:nil="true" />
<primary_country xsi:nil="true" />
<email_address xsi:nil="true" />
<address_start_dt xsi:nil="true" />
<address_end_dt xsi:nil="true" />
<entrance_iv_dt xsi:nil="true" />
<entrance_iv_by xsi:nil="true" />
<exit_iv_dt>2006-11-02T00:00:00</exit_iv_dt>
<exit_iv_by>156</exit_iv_by>
<foreign_address_indicator>N</foreign_address_indicator>
<foreign_postal_code xsi:nil="true" />
<pin>J27841</pin>
<web_id>J08614 </web_id>
<prior_name xsi:nil="true" />
<orig_eps xsi:nil="true" />
<web_role>STU1</web_role>
<heal_limit_flag>N</heal_limit_flag>
<email_address_2>test@test.com</email_address_2>
<cellular_telephone>415</cellular_telephone>
<alt_loan_debt xsi:nil="true" />
<web_last_login xsi:nil="true" />
<foreign_country_code xsi:nil="true" /> …Run Code Online (Sandbox Code Playgroud) 如何使用开放XML SDK在Word中创建水平规则?
使用C#4.5打开XML SDK 2.0
我正在寻找某种paragraph.append(new HorizontalRule())命令,但似乎找不到任何东西.
我在一张excel文件中有3个表,我使用OpenXML SDK来读取Excel文件,如下所示:
SpreadSheetDocument document = SpreadSheetDDocument.open(/*read it*/);
foreach(Sheet sheet in document.WorkbookPart.Workbook.Sheets)
{
//I need each table or work part of sheet here
}
Run Code Online (Sandbox Code Playgroud)
所以当你看到我可以获得每张Excel时,但是如何在每张表中获得工作部分,比如我可以在这些表上迭代的3个表,是否有人知道这一点?有什么建议吗?
我正在尝试使用OpenXML SDK 2.5创建一个空的Word文档(DOCX).以下代码对我不起作用,因为MainDocumentPart为null.
public static void CreateEmptyDocxFile(string fileName, bool overrideExistingFile)
{
if (System.IO.File.Exists(fileName))
{
if (!overrideExistingFile)
return;
else
System.IO.File.Delete(fileName);
}
using (WordprocessingDocument document = WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document))
{
const string docXml =
@"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
<w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
<w:body>
<w:p>
<w:r>
<w:t></w:t>
</w:r>
</w:p>
</w:body>
</w:document>";
using (Stream stream = document.MainDocumentPart.GetStream())
{
byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
stream.Write(buf, 0, buf.Length);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在浏览docx,使用open xml来查找一些图像.
所以,我这样做是为了得到所有的图纸,它有一个docProperties作为孩子,标题包含
List<Drawing> sdtElementDrawing = wordDoc.MainDocumentPart.Document.Descendants<Drawing>()
.Where(element =>
element.GetFirstChild<Drawing>() != null
&& element.GetFirstChild<DocProperties>().Title.Value.Contains("IMAGE")).ToList();
Run Code Online (Sandbox Code Playgroud)
而docx作为xml看起来在第一部分看起来很喜欢(它通常更大,但我只复制相关部分):
<w:drawing>
<wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251658240" behindDoc="1" locked="0" layoutInCell="1" allowOverlap="1" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<wp:simplePos x="0" y="0" />
<wp:positionH relativeFrom="column">
<wp:posOffset>2171700</wp:posOffset>
</wp:positionH>
<wp:positionV relativeFrom="paragraph">
<wp:posOffset>-1168400</wp:posOffset>
</wp:positionV>
<wp:extent cx="2286000" cy="746760" />
<wp:effectExtent l="0" t="0" r="0" b="0" />
<wp:wrapNone />
<wp:docPr id="1" name="Image 1" descr="C:\Users\Pictures\IMAGERM.jpg" title="IMAGERM" />
</wp:anchor>
</w:drawing>
Run Code Online (Sandbox Code Playgroud)
但我没有找到sdtElementDrawing.
所以我想我错误地写了这个sdtElementDrawing查询.我必须错过一个明显的方式来告诉"得到绘图的孩子,哪里有一个像IMAGE这样的标题的DocProperties",但我找不到它.
我也试过这个,但效果不好:
List<Drawing> sdtElementDrawing = wordDoc.MainDocumentPart.Document.Descendants<Drawing>()
.Where(element =>
element.GetFirstChild<Drawing>() != null &&
element.GetFirstChild<Drawing>().Anchor.GetFirstChild<DocProperties>().Title.Value.Contains("IMAGE")).ToList();
Run Code Online (Sandbox Code Playgroud) 我试图插入数据VIA XML格式.同样的XML格式定义如下&我想在SQL表中逐行插入字段.但是,没有地址插入SQL表,只有客户信息插入虚拟表.
<XML>
<Customer>
<NAME>YOGESH</NAME>
<CONTACT>YOGESH SHARMA</CONTACT>
<Mobile>123456789</Mobile>
<Status>A</Status>
<MALE>1</MALE>
<Add>
<ADD1>
<Address>AHMEDABAD</Address>
<State>GUJARAT</State>
<City>AHMEDABAD</City>
<Pincode>380016</Pincode>
</ADD1>
<ADD2>
<Address>RAJKOT</Address>
<State>GUJARAT</State>
<City>RAJKOT</City>
<Pincode>360001</Pincode>
</ADD2>
</Add>
</Customer>
</XML>
Run Code Online (Sandbox Code Playgroud)
我的SP如下:
ALTER PROCEDURE [dbo].[OPENXMLDUMMY]
@xmlCustomer NTEXT
AS
BEGIN
DECLARE @DOC INT;
EXEC sp_xml_preparedocument
@DOC OUTPUT,
@xmlCustomer;
INSERT INTO Dummy
(Name,
Contact,
Mobile,
Status,
Male,
InsertDate
)
SELECT XML.NAME,
XML.Contact,
XML.Mobile,
XML.Status,
XML.Male,
GETDATE()
FROM OPENXML(@DOC, '/XML/Customer', 2) WITH(Name VARCHAR(50),
Contact VARCHAR(75), Mobile BIGINT, Status VARCHAR(10), Male VARCHAR(10),
InsertDate DATETIME) XML;
INSERT INTO DummyExtd
( …Run Code Online (Sandbox Code Playgroud) openxml ×10
c# ×8
ms-word ×4
openxml-sdk ×4
sql-server ×2
.net-core ×1
c#-4.0 ×1
excel ×1
memorystream ×1
sql ×1
t-sql ×1
wordml ×1
xml-nil ×1