我正在寻找一种方法来识别移动或重命名的DOCX文件.原因很明显,我正在使用Open XML SDK,构建一个超链接检查器.
工作完美,至少可以添加或更新文档中的超链接.
但问题是,如果我将外部文件(source.docx + target.docx重命名为targetB.docx)重命名,则链接会中断.我可以找到断开的链接(只需检查链接文件是否在其给定的位置).
但我想要更多.我希望能够通过搜索目录(docx)中的所有文档并扫描它们是否为"目标"来恢复丢失的链接.最简单的方法应该是存储在文档属性中某处的GUID,如果重命名或编辑文档,则不会更改(校验和不适用).
然后我创建一个单独的链接列表和相应的ID,如果任何文档被重命名,我只是更新链接.我希望这个概念很清楚.
所以有一些基本问题:
我希望这个问题很清楚,如果不是我试着澄清一下,只要发表评论即可.
谢谢,克里斯
如何从docx文件中逐字(带样式)阅读.我想逐个比较两个docx文件,并根据我要写入另一个docx文件的差异(使用c#和OOXML).我尝试使用DocumentFormat.OpenXml.Extensions.dll,OpenXMLdiff.dll和ICSharpCode.SharpZipLib.dll来实现这一点,但没有任何东西可以让我逐字阅读(ICSharpCode.SharpZipLib确实逐字逐句地提供)它不会给出与该词相关的风格).
任何有关这方面的帮助都非常有用.
我有下面的代码.我想用"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) 我从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) 系统描述
使用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总是不受信任的?
我正在使用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并且没有前缀,但是,在保存操作之后出现前缀.我怎么能避免这种情况?
我正在尝试使用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) 免责声明:我是冷血新手.我正在尝试使用图像和多个选项卡创建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) 我在添加到我的word文档的超链接时遇到了麻烦.我不知道怎么做.我想使用open xml在我的C#代码中的word文档中建立链接.是否只使用href或类似的不同解决方案?Open XML上有一个HyperLink类但是如何使用它?
我正在使用C#中的OpenXml包生成一个MS Word文档.很多次我看到这个erorr消息:

这个错误信息是无用的:所有它说问题是在页脚中.大多数时候它说错误在第1行,char 1.
我经常发现问题,但来回走动需要花费太多时间.
是否有任何工具/技术可以帮助调试此类错误?显示一个更好的错误,就像你试图添加一个运行的文本,或类似的东西?
openxml ×10
c# ×6
openxml-sdk ×4
.net ×2
ms-word ×2
asp.net ×1
c#-3.0 ×1
c++ ×1
coldfusion ×1
com ×1
debugging ×1
excel ×1
excel-2007 ×1
excel-2010 ×1
guid ×1
namespaces ×1
sharepoint ×1