我们正在尝试构建一个默认的Excel仪表板,我们的用户可以下载.下载Excel工作表时,我们希望使用其数据填充文件中的工作表.
我们使用EPPlus来处理Excel工作表.
简而言之,表的结构如下:
Sheet A
带有报告元素(数据透视表,数据透视图和切片器)Sheet B
其中包含整个数据集=OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1))
它只是适应我们插入到该工作表中的数据集的大小Sheet A
都配置为从数据模型加载数据总的来说,只要我们手动填充Sheet B
数据,这就行得很好.当我们尝试使用EPPlus填充数据时,我们在尝试保存文件时出错:
The cachesource is not a worksheet
Run Code Online (Sandbox Code Playgroud)
通过反复试验,我们剥去了它的部件,以找出问题的原因.我们怀疑它可能是切片器,Power Query/Data Model的使用或命名范围的技巧.但是,这些都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了.令我惊讶的是,我们能够很好地使用数据透视图,它只是引起问题的表格.
有关如何使用EPPlus避免此问题的任何建议?现在,我们继续不使用数据透视表,我们希望让他们在某些时候返回:)
我有一个有点奇怪的任务。我们即将关闭一个相当大的内部解决方案,并希望一次性导出它所保存的数据。
该解决方案生成 PDF 格式的报告。这些 PDF 主要包含文本,但也包含图像。这些图像是链接,激活后会打开浏览器并指向该图像的全尺寸版本。
由于我们即将关闭底层系统,因此全尺寸图像的外部链接也将停止工作。
由于各种奇怪的原因,我们对报告生成本身的控制有限,因此我们大多仅限于对报告进行后处理。
到目前为止我设计的计划是从系统生成所有必要的报告并通过 iTextSharp 处理它们。我想要实现的“全部”是处理每个 PDF 并且:
我不熟悉 PDF 的底层结构,因此在尝试使用 iTextSharp 时遇到了很多困难。然而,到目前为止我已经成功解决了(1)和(2)。但我正在努力解决(3):
我主要用这个作为我的支持文件,但我还没有完全达到我的目标。
这是我正在处理每个注释的代码。请注意,我正在使用 iTextSharp 版本 5.5.13:
if (AnnotationDictionary.Get(PdfName.A) != null)
{
var annotActionObject = AnnotationDictionary.Get(PdfName.A);
var AnnotationAction = (PdfDictionary)(annotActionObject.IsIndirect() ? PdfReader.GetPdfObject(annotActionObject) : annotActionObject);
var type = AnnotationAction.Get(PdfName.S);
//Test if it is a URI action
if (type.Equals(PdfName.URI))
{
//Attach the downloaded file
PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, embFile.Path, embFile.Description, null);
pfs.AddDescription(embFile.Description, false);
writer.AddFileAttachment(pfs);
//Removing old annotation
AnnotationAction.Remove(PdfName.A);
AnnotationDictionary.Remove(PdfName.A);
PdfDestination …
Run Code Online (Sandbox Code Playgroud)