标签: openxml

DOCX中唯一ID的最佳位置(Open XML WordprocessingDocument)

我正在寻找一种方法来识别移动或重命名的DOCX文件.原因很明显,我正在使用Open XML SDK,构建一个超链接检查器.

工作完美,至少可以添加或更新文档中的超链接.

但问题是,如果我将外部文件(source.docx + target.docx重命名为targetB.docx)重命名,则链接会中断.我可以找到断开的链接(只需检查链接文件是否在其给定的位置).

但我想要更多.我希望能够通过搜索目录(docx)中的所有文档并扫描它们是否为"目标"来恢复丢失的链接.最简单的方法应该是存储在文档属性中某处的GUID,如果重命名或编辑文档,则不会更改(校验和不适用).

然后我创建一个单独的链接列表和相应的ID,如果任何文档被重命名,我只是更新链接.我希望这个概念很清楚.

所以有一些基本问题:

  • 是否有"最佳实践"将此"自定义信息"存储在Open XML Document中
  • wordprocessingdocument(DOCX)是否已经拥有Word创建的一些唯一标识符
  • 你会在哪里保存映射(超链接目标的GUID)

我希望这个问题很清楚,如果不是我试着澄清一下,只要发表评论即可.

谢谢,克里斯

guid openxml

8
推荐指数
1
解决办法
1534
查看次数

使用OOXML比较Docx文件

如何从docx文件中逐字(带样式)阅读.我想逐个比较两个docx文件,并根据我要写入另一个docx文件的差异(使用c#和OOXML).我尝试使用DocumentFormat.OpenXml.Extensions.dll,OpenXMLdiff.dllICSharpCode.SharpZipLib.dll来实现这一点,但没有任何东西可以让我逐字阅读(ICSharpCode.SharpZipLib确实逐字逐句地提供)它不会给出与该词相关的风格).

任何有关这方面的帮助都非常有用.

openxml openxml-sdk wordprocessingml c#-3.0

8
推荐指数
1
解决办法
2308
查看次数

OpenXML替换所有文档中的文本

我有下面的代码.我想用"NewText"替换文本"Text1",这是有效的.但是当我将文本"Text1"放在一个不再适用于表格内"Text1"的表格中时.

我想在所有文件中进行替换.

using (WordprocessingDocument doc = WordprocessingDocument.Open(String.Format("c:\\temp\\filename.docx"), true))
{
    var body = doc.MainDocumentPart.Document.Body;

    foreach (var para in body.Elements<Paragraph>())
    {
        foreach (var run in para.Elements<Run>())
        {
            foreach (var text in run.Elements<Text>())
            {
                if (text.Text.Contains("##Text1##"))
                    text.Text = text.Text.Replace("##Text1##", "NewText");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# ms-word openxml openxml-sdk

8
推荐指数
3
解决办法
2万
查看次数

如何计算OpenXML中每个工作表的行数

我从Interop库切换到OpenXML,因为我需要读取大Excel文件.在此之前,我可以使用:

worksheet.UsedRange.Rows.Count
Run Code Online (Sandbox Code Playgroud)

获取工作表上包含数据的行数.我使用这些信息来制作进度条.在OpenXML中,我不知道如何获得有关工作表的相同信息.我现在拥有的是这段代码:

 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(path, false))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    int row_count = 0, col_count;
    // here I would like to get the info about the number of rows
    foreach (Row r in sheetData.Elements<Row>())
    {
        col_count = 0;
        if (row_count > 10)
        {
            foreach (Cell c in r.Elements<Cell>())
            {
                // do some stuff  
                // update progressbar  
            }
        }
        row_count++;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# openxml

8
推荐指数
1
解决办法
1万
查看次数

在OOXML中使用大二进制段的问题

系统描述

使用OOXML生成文档的绘图组件.

绘图组件由几个部分组成.除了OOXML文档的接口之外,所有部分都用C++编写为exe + dll.后一个组件是在C#/ .NET中创建的COM组件.主要原因是.NET框架包含System.IO.Packaging.这是一个非常方便的内置工具,用于处理OOXML文档.

我们使用模板OOXML文档创建文档,其中某些零碎的部分由其实际内容替换.

其中一个位是OLE服务器组件.基本上这是OOXML文件中的二进制段.为了编写这个二进制段,Packaging组件显然使用了独立存储.

问题

写一个> 8MB的段导致抛出异常"无法确定域的身份".

在C++端,此异常包含错误ISS_E_ISOSTORE(0x80131450).

我们已经对此进行了分析,据我们所知,这是一个安全功能,可防止半不受信任的第三方组件通过编写大量文件来完全破坏您的HD.

然后我们在.NET/COM组件中尝试了很多东西(创建自定义AppDomain,设置属性以获得最大允许性,创建我们自己的Streams并将它们传递给Packaging组件)但每次都会导致抛出相同的异常.

我们可以做些什么来完成这项工作?

可能是当.NET组件被实例化为COM组件时,其AppDomain总是不受信任的?

.net c# c++ com openxml

7
推荐指数
1
解决办法
647
查看次数

XLSX-如何摆脱默认的名称空间前缀x:?

我正在使用OOXML SDK生成XLSX电子表格,我需要摆脱x:名称空间前缀.我怎样才能做到这一点?

using (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true))
            {
                //Save the shared string table part
                if (doc.WorkbookPart.GetPartsOfType().Count() > 0)
                {
                    SharedStringTablePart shareStringPart = 
doc.WorkbookPart.GetPartsOfType().First(); shareStringPart.SharedStringTable.Save(); } //Save the workbook doc.WorkbookPart.Workbook.Save(); }

这里,原始XLSX文件来自Excel 2007并且没有前缀,但是,在保存操作之后出现前缀.我怎么能避免这种情况?

namespaces openxml spreadsheetml openxml-sdk

7
推荐指数
1
解决办法
2362
查看次数

从ASP.NET页面下载EXCEL文件而不在服务器上生成物理文件(On The Fly)

我正在尝试使用Microsoft Office EXCEL INTEROP将C#DataTable动态导出到EXCEL文件(不创建物理文件),并通过asp.net网页通过Response对象下载.我能够使用库生成内存流但不知何故文件没有通过内存流保存.参考代码如下.您将需要参考DocumentFormat.OpenXml.dll和WindowsBase.DLL(可以从microsoft站点下载).

任何想法如何解决问题???

Private void DownloadFile()
{
                DataSet objTable = ReadTableFromViewstate();
            if (objTable != null && objTable.Rows.Count > 0)
            {

                string strDownloadableFilename = "TestExcelFileName.xls";
                MemoryStream fs1 = new MemoryStream();
                if (CreateExcelFile.CreateExcelDocument(objTable, fs1))
                {
                    Response.Clear();
                        byte[] data1 = new byte[fs1.Length];
                        fs1.Read(data1, 0, data1.Length);
                        fs1.Close();

                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", strDownloadableFilename));
                    Response.BinaryWrite(data1); ;
                   Response.End();

                }
                else
                {
                    LblErrorMessage.Text = "Error Exporting File.";
                }
            }

        }
Run Code Online (Sandbox Code Playgroud)

..

public static bool CreateExcelDocument(DataSet ds, System.IO.Stream excelFileStream)
    {
        try
        {
            using (SpreadsheetDocument document …
Run Code Online (Sandbox Code Playgroud)

c# asp.net openxml office-interop openxml-sdk

7
推荐指数
1
解决办法
2万
查看次数

如何使用coldfusion创建xlsx文件

免责声明:我是冷血新手.我正在尝试使用图像和多个选项卡创建Excel 2010文档.我已经能够将其输出到XLS中,但我无法将图像输入到文件中.

我还没有找到如何正确创建XLSx文件的完整示例.我宁愿学习正确的方法,以后养成自己的坏习惯,而不仅仅是养成坏习惯.

这是一个例子:

<!--- Make CF export to Excel --->
<!--- This will create a XLS file --->
<!--- <cfheader name="Content-Disposition" value="attachment; filename=#URL.TRNo#_image.xls">
<cfcontent type="application/vnd.msexcel"> --->

<!--- This does not work to create an XLSX file --->
<cfheader name="Content-Disposition" value="inline; filename=#URL.TRNo#_image.xlsx">
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"> 

<cfparam name="URL.TRNo" default="AD0310">

<cfoutput>
    <?xml version="1.0"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
        <ss:Styles>
            <ss:Style ss:ID="Default" ss:Name="Normal">
                <ss:Font ss:Size="11" ss:FontName="Calibri"/>
            </ss:Style>
            <ss:Style ss:ID="Left">
                <ss:Alignment ss:Horizontal="Left"/>
            </ss:Style>
            <ss:Style ss:ID="Center">
                <ss:Alignment ss:Horizontal="Center"/>
            </ss:Style>
            <ss:Style ss:ID="Right">
                <ss:Alignment ss:Horizontal="Right"/>
            </ss:Style>
        </ss:Styles>


        <Worksheet ss:Name="#URL.TRNo# page …
Run Code Online (Sandbox Code Playgroud)

coldfusion excel excel-2007 openxml excel-2010

7
推荐指数
1
解决办法
2万
查看次数

如何使用开放XML将超链接添加到Word docx?

我在添加到我的word文档的超链接时遇到了麻烦.我不知道怎么做.我想使用open xml在我的C#代码中的word文档中建立链接.是否只使用href或类似的不同解决方案?Open XML上有一个HyperLink类但是如何使用它?

c# sharepoint openxml

7
推荐指数
1
解决办法
6694
查看次数

在C#生成中调试损坏的OpenXML Word文档的最佳实践

我正在使用C#中的OpenXml包生成一个MS Word文档.很多次我看到这个erorr消息:

无法打开文件.docx,因为内容存在问题

这个错误信息是无用的:所有它说问题是在页脚中.大多数时候它说错误在第1行,char 1.

我经常发现问题,但来回走动需要花费太多时间.

是否有任何工具/技术可以帮助调试此类错误?显示一个更好的错误,就像你试图添加一个运行的文本,或类似的东西?

c# debugging ms-word openxml

7
推荐指数
1
解决办法
1444
查看次数