我希望有人可以帮助我使用ClosedXML,因为我是Excel新手出口的人,而且从我看到的ClosedXML,文档在某些方面相当有限.
目前我正在将数据放入Datatable,将行格式化为正确的类型并使用正确的布局导出.
当我尝试在每个单元格中导出包含重复公式的一行时,会发生此问题.
我试图将公式简单地添加为一个字符串,然后我可以在文件导出时突出显示并转换,这显然不是理想的.我发现了一个XML类,XLFormula它完全没有文档,但我认为我应该对此做些什么.
目前我已经(注释掉我正在使用的方式XLFormula,试图XLFormula将公式作为字符串传递并设置为每单位的总出价):
dt.Columns.Add("Qty", typeof(int));
dt.Columns.Add("Bid Per Unit GBP", typeof(double));
dt.Columns.Add("Total Bid GBP"); //typeof(XLFormula)
foreach (DataRow dr in dt.Rows)
{
//XLFormula totalBidFormula = new XLFormula();
dr["Qty"] = 1;
dr["Bid Per Unit GBP"] = 0.00;
dr["Total Bid GBP"] = "=[@Qty]*[@[Bid Per Unit GBP]]";
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.如果我想用ClosedXML做的事情是不可能的,请告诉我,如果你可以建议一个替代的XML导出器(即使它已付费),这将有所帮助!
根据文档,您可以使用以下语法向单元格添加条件格式:
.AddConditionalFormat().WhenEquals("=B1")
Run Code Online (Sandbox Code Playgroud)
所以我尝试了这个:
cell.AddConditionalFormat().WhenEquals("=F5=0")
.Fill.SetBackgroundColor(XLColor.FromHtml("#f00"));
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试这个时,将电子表格加载到Excel中,并查看单元格的条件格式,它似乎已将其更改为简单的"单元格值等于"类型,而不是公式类型.所以我看到了这个:
但我想看到的是:
我错过了什么!?
我正在使用 PowerShell 3 和 ClosedXML 将文件信息写入 Excel 工作表。在其中一个单元格中,我需要将背景颜色设置为浅蓝色(矢车菊蓝色或 RGB 中的 219、229、249)。我已经尝试了多种方法,但到目前为止都没有成功。根据 ClosedXML 站点,我应该能够引用 XLColor 对象。我还尝试了多种设置背景颜色的方法。
$cell.Style.Fill.BackgroundColor.Color(219, 229, 249)
Run Code Online (Sandbox Code Playgroud)
或 $cell.Style.Fill.SetBackgroundColor(6) 或 $cell.Style.Fill.SetBackgroundColor(XLColor.Blue)
任何建议将不胜感激。大多数示例是 C#,它们通常可以无缝转换,但这是我没有运气弄清楚的示例。
感谢里克·安德森
使用Microsoft ClosedXml和 DocumentFormat.OpenXmlNuGet实用程序包时出现错误。更新了这些NuGet程序包(从2.7.2版到2.8.1版)后,现在出现以下异常:
异常System.IO.FileLoadException:无法加载文件或程序集'DocumentFormat.OpenXml,版本= 2.7.2.0,区域性=中性,PublicKeyToken = 8fb06cb64d019a17'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)
当我查看解决方案项目中的相关程序集时,它引用了正确的版本(2.8.1)。查看NuGet程序包管理器,没有对旧版2.7.2的引用(4个项目对新版2.8.1的引用)。在任何有关版本2.7.2的项目引用中,我都找不到任何提及。正在执行的应用程序文件夹中的文件也是正确的文件(2.8.1)(通过查看项目属性窗口的详细信息选项卡)。在我的解决方案中的其他地方,对旧版本号的引用(显然是导致此异常的地方)可以找到吗?
附加信息:我已经grep在执行此操作的应用程序目录(包括子目录)中的所有文件(包括二进制文件)上执行了操作,并且2.7.2找不到字符串。
另外,当我在Visual Studio中调试此程序时,它不会抛出异常。但是,当我在部署的构建文件夹中运行它时,我得到FileLoadException。
我可以使用 OpenXML 将图像添加到 Excel 电子表格中。但是对于程序的其余部分,我使用 ClosedXML 添加数据。我可以使用列和行索引在特定单元格添加数据。如果我可以将图像添加到 excel(它目前似乎是一个单独的图层,悬停在单元格上),如何使用 ClosedXML 将其添加到单元格?
//Adds an image to the excel file
public void AddImageToExcel(SpreadsheetDocument sd, MemoryStream imagestream)
{
DrawingsPart dp = sd.WorkbookPart.WorksheetParts.First().AddNewPart<DrawingsPart>();
ImagePart imgp = dp.AddImagePart(ImagePartType.Jpeg, sd.WorkbookPart.WorksheetParts.First().GetIdOfPart(dp));
MemoryStream bmstream = new MemoryStream(imagestream.ToArray());
bmstream.Seek(0, SeekOrigin.Begin);
MemoryStream fs;
using (fs = imagestream)
{
fs.Position = 0;
imgp.FeedData(fs);
}
DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualDrawingProperties nvdp = new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualDrawingProperties();
nvdp.Id = 1025;
nvdp.Name = "Chart Image";
nvdp.Description = "Image";
DocumentFormat.OpenXml.Drawing.PictureLocks piclocks = new DocumentFormat.OpenXml.Drawing.PictureLocks();
piclocks.NoChangeAspect = true;
piclocks.NoChangeArrowheads = true;
DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualPictureDrawingProperties nvpdp …Run Code Online (Sandbox Code Playgroud) 我正在使用ClosedXML从 C# 生成 Excel 文件,并且我试图查看是否可以设置工作表的缩放级别。我在任何文档或谷歌搜索中都找不到这个?
有人知道怎么做这个吗?
这是根据文档使用 ClosedXML 合并单元格的方法。
worksheet.Range("B2:D3").Row(1).Merge();
Run Code Online (Sandbox Code Playgroud)
我的问题是我的列计数是动态的,我无法设置要合并的列字母值,因为我将基于 gridview 列计数来合并单元格。
谁能帮我使用 closeXML 合并单元格?
ClosedXML是否具有可用于将Excel文件另存为PDF的功能?
目前我正在使用ClosedXML来创建和填充excel文件,然后使用Interop保存为PDF.
但由于Interop依赖于syatem上安装的MS Office,因此每个版本的MS Office都会格式化.而且由于ClosedXML不需要安装MS Office,因此无需使用Interop即可直接从中导出或保存为PDF.
我有一个 ASP.NET MVC 应用程序,用户可以在其中上传要处理的 xlsx 文件。
这会HttpPostedFileBase在上传中创建一个对象,该对象具有方便的流方法HttpPostedFileBase.InputStream。
我想使用 ClosedXML 处理文件,但我不知道如何XLWorkbook从流构造对象。 其他SO答案使用像这样的普通文件:
string fileName = "C:\\Folder1\\Prev.xlsx";
var workbook = new XLWorkbook(fileName);
Run Code Online (Sandbox Code Playgroud)
这个问题探讨了如何SaveAs作为流,但我想从流创建。
XLWorkbook那么如何从流中打开一个呢?
在尝试使用 ClosedXML 构建 Excel 文件时,我遇到了一些有关内存流的意外行为。在调试器中,我可以看到 MemoryStream ms 正在由该wb.SaveAs()函数填充。但是,当直接将其传递到 时DotNetStreamReference,该文件将作为 0 字节的 blob 下载。
奇怪的是,当我将流转换为字节数组并返回流时,该函数按预期工作。
我在这里错过了一些基本的东西吗?
这是使用MS 示例得出的
技术:
C# 代码
async Task ExportToExcel()
{
string fileName = $"DocumentsExport{DateTime.UtcNow.Ticks}.xlsx";
var wb = new ClosedXML.Excel.XLWorkbook();
var ws = wb.AddWorksheet("Documents");
// construct headers
ws.Cell(1, 1).SetValue<string>("Document Name");
ws.Cell(1, 2).SetValue<string>("Description");
ws.Cell(1, 3).SetValue<string>("Sort Order");
ws.Cell(1, 4).SetValue<string>("Category Name");
ws.Cell(1, 5).SetValue<string>("Group Name");
ws.Cell(1, 6).SetValue<string>("Date Modified");
// construct worksheet contents
for (int i = 0; i < documents.Count; …Run Code Online (Sandbox Code Playgroud)