我有一个Excel 2007 OpenXML格式的大型电子表格,我想以编程方式在xml中操作.Excel使用共享字符串方法保存它,虽然效率更高,但会使过程复杂化.有没有人知道Excel中是否有一个选项可以使用内联字符串进行保存,或者是否已经构建了一个实用程序来将所有字符串重新放回到sheet.xml中?没有太多的运气谷歌搜索,我宁愿使用现有的解决方案,而不是建立我自己的转换器,如果可能的话.谢谢.
我已经开始使用TDD方法开发一个从Excel文件中读取数据的小应用程序.使用存储库模式类型的方法,我遇到了困扰我的障碍.
为了读取Excel文件,我使用的是OpenXml-SDK.现在通常使用SDK从Excel文件中读取需要几个(如果不是更多)步骤来实际获取您想要读取的值.
到目前为止,我所采用的方法反映在以下测试和附带功能中.
[Test]
public void GetRateData_ShouldReturn_SpreadSheetDocument()
{
//Arrange
var fpBuilder = new Mock<IDirectoryBuilder>();
fpBuilder.Setup(fp => fp.FullPath()).Returns(It.IsAny<string>());
var doc = new Mock<IOpenXmlUtilities>();
doc.Setup(d => d.OpenReadOnlySpreadSheet(It.IsAny<string>()))
.Returns(Mock.Of<SpreadsheetDocument>());
swapData = new SwapRatesRepository(fpBuilder.Object, doc.Object);
//Act
var result = swapData.GetRateData();
//Assert
doc.Verify();
fpBuilder.Verify();
}
public class SwapRatesRepository: IRatesRepository<SwapRates>
{
private const string SWAP_DATA_FILENAME = "DATE_MKT_ZAR_SWAPFRA1.xlsx";
private IDirectoryBuilder builder;
private IOpenXmlUtilities openUtils;
public SwapRatesRepository(IDirectoryBuilder builder)
{
// TODO: Complete member initialization
this.builder = builder;
}
public SwapRatesRepository(IDirectoryBuilder builder,
IOpenXmlUtilities openUtils)
{
// TODO: Complete member …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种将XML数据存储在Excel文件中的方法.数据应该完全隐藏给用户,它不应该在单元格或注释中,甚至是隐藏的.此外,应在用户打开时保留数据,然后使用Excel保存文件.我不是在寻找一种将单元格映射到外部XML数据的方法.XML数据应该在xlsx文件中.
数据将使用C#工具输入,而不是Excel本身.
我有一个包含3张幻灯片的Powerpoint演示文稿.每张幻灯片都有一个文本框,它是一个占位符.我想替换一张幻灯片上的文本框内容.
我需要知道如何使用C#和OpenXML来做到这一点
万分感谢
我正在使用openxml来创建Word DOCX文件.我想将这些文档创建为PDF文件后保存.有没有办法在openxml中做到这一点?我认为答案是否定的.如果不是,是否有推荐的库或工具可用于将DOCX文件保存/打印为PDF(以编程方式,在.NET中)?我看了一下sharpPDF(PDFSharp),看来这个库只是用于从头开始生成PDF,而不是将DOCX保存为PDF.
我能以某种方式以完全自动化的方式打印到已安装的PDF打印机,可爱的PDF或内置于Windows 7的PDF打印机吗?
更新:寻找免费的非病毒许可证,最好不需要额外的安装.
以下创建了一个XLSX,添加了两个包含一些数据的工作表.然后,我希望以后能够根据名称(或最好是id)获取电子表格,以便我可以在以后添加/修改工作表.我仍然坚持如何在下面的代码不完整的地方再次获取工作表.
Sub Main()
Using doc As SpreadsheetDocument = SpreadsheetDocument.Create(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "c:\temp\fubar.xlsx"), SpreadsheetDocumentType.Workbook)
Dim currSheet As WorksheetPart
' create the workbook
doc.AddWorkbookPart()
doc.WorkbookPart.Workbook = New Workbook()
doc.WorkbookPart.Workbook.AppendChild(New Sheets())
currSheet = InsertWorksheet(doc.WorkbookPart, "First")
currSheet.Worksheet.First().AppendChild(New Row())
currSheet.Worksheet.First().First().AppendChild(New Cell() With { _
.CellValue = New CellValue("1") _
})
currSheet = InsertWorksheet(doc.WorkbookPart, "Second")
currSheet.Worksheet.First().AppendChild(New Row())
currSheet.Worksheet.First().First().AppendChild(New Cell() With { _
.CellValue = New CellValue("1") _
})
For Each s As Sheet In doc.WorkbookPart.Workbook.Sheets
System.Diagnostics.Debug.WriteLine(s.Id)
System.Diagnostics.Debug.WriteLine(s.SheetId)
Next
cursheet = ... 'Get worksheetpart with name "First"
cursheet = …Run Code Online (Sandbox Code Playgroud) 我 Nugot SpreadsheetLight。为了随后使用它,我需要添加以下用途:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
Run Code Online (Sandbox Code Playgroud)
为了识别前两个(“DocumentFormat”),我还需要使用 NuGet Microsoft 的“Open XML Format SDK”
我得到了最新版本,2.5
然而,即便如此,我还是收到了一个关于需要引用它的错误消息:
“DocumentFormat.OpenXml.Spreadsheet.InlineString”类型是在未引用的程序集中定义的。您必须添加对程序集“DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”的引用。
这行 SpreadsheetLight 代码激起了那个味精:
sl.SetCellValue("A1", true); // "sl" is an SLDocument
Run Code Online (Sandbox Code Playgroud)
因此,我从我的项目中删除了我拥有 NuGot(版本 2.6.0.0,运行时版本 v4.0.30319)的引用,然后通过浏览到 C:\Program Files(x86)\Open XML SDK\V2 添加回引用。 0\lib 并选择“DocumentFormat.OpenXml.dll”
然后我得到了一个编译器警告:
发现同一依赖程序集的不同版本之间存在冲突。请在项目文件中将“AutoGenerateBindingRedirects”属性设置为 true。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=294190。
我注意到我从文件系统中添加的 DLL 是 2.5.5631.0 版本,而被 NuGot 安装作为参考的那个 DLL 是 2.6.0.0 版本,运行时版本也不同(v4.0.30319 是由NuGetting“Open XML Format SDK”,但是我手动添加的DLL版本是2.5.5631.0,Runtime Version v4.0.30319
根据这个,我得知我应该改变编辑的.csproj文件<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>为真-但AutoGenerateBindingRedirects不存在那里。
我不知道我是否应该添加它,如果是(在哪个“块”中)。我更喜欢谨慎行事并减轻警告引擎的影响。如何确保 OpenXml 程序集不会引起冲突?
在我的网站上,admin上传了一个.docx文件.我将文件转换为xml 使用OpenXmlPowerToolsApi.
问题是该文件中有一些子弹.
•这是我在文件中的子弹1.
•这是我在文件中的子弹2.
XElement html = OpenXmlPowerTools.HtmlConverter.ConvertToHtml(wDoc, settings);
var htmlString = html.ToString();
File.WriteAllText(destFileName.FullName, htmlString, Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
现在,当我打开xml文件时,它会将子弹渲染如下: -
我需要读取XML的每个节点并保存在数据库中并从节点重新构建html.
请不要问我为什么这样,因为我不是系统的老板.
如何在xml中正确渲染项目符号,以便我可以在数据库中保存正确的html?
我有一个 Excel 表,我将其用作导出数据的模板文件。
Excel 工作表是 XLSM 文件,几乎没有用 VBA 编写的代码。
每次使用时间戳复制和重命名文件时,都应将数据写入复制的 xlsm 文件,但不写入数据。
我为此使用了 Open XML 库。
如果我使用 xlsx 模板文件,同样有效。
是否无法通过 Open XML 在启用了宏的 xlsm Excel 上写入?
如果是,请记住任何说明。
我通常会使用 ClosedXML 来生成 Excel 文件。核心项目迫使我只使用 OpenXML。
将下载生成的 Excel 文件。
我遇到了一个问题,其中提供给 SpreadsheetDocument 的内存流为空。
我尝试了多种方法来生成流。下面的代码代表了一个精简版,只创建了最基本的东西。同样,内存流是0有长度的。
我知道我应该使用using()等。这只是精简代码以尝试让它工作。
生成excel的代码;这是来自File对象的构造函数。AsMemoryStream是一个属性声明为public MemoryStream AsMemoryStream { get; private set; }
public File(IList<T> items)
{
if (!items.Any())
throw new InvalidOperationException("items cannot be empty");
MemoryStream documentStream = new MemoryStream();
SpreadsheetDocument document = SpreadsheetDocument.Create(documentStream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook);
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet { …Run Code Online (Sandbox Code Playgroud) openxml ×10
c# ×6
excel ×4
openxml-sdk ×4
xml ×2
.net ×1
asp.net ×1
asp.net-core ×1
csproj ×1
docx ×1
nuget ×1
pdf ×1
tdd ×1
unit-testing ×1
vb.net ×1
vba ×1
xml-parsing ×1