小编Chr*_*sen的帖子

如果工作簿包含数据透视表,则在添加数据后无法保存Excel工作表

我们正在尝试构建一个默认的Excel仪表板,我们的用户可以下载.下载Excel工作表时,我们希望使用其数据填充文件中的工作表.

我们使用EPPlus来处理Excel工作表.

简而言之,表的结构如下:

  1. Sheet A 带有报告元素(数据透视表,数据透视图和切片器)
  2. Sheet B 其中包含整个数据集
  3. 定义的命名范围,=OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1))它只是适应我们插入到该工作表中的数据集的大小
  4. 无论命名范围包含我加载到Power Query并添加到工作簿数据模型
  5. 所有报告元素Sheet A都配置为从数据模型加载数据

总的来说,只要我们手动填充Sheet B数据,这就行得很好.当我们尝试使用EPPlus填充数据时,我们在尝试保存文件时出错:

The cachesource is not a worksheet
Run Code Online (Sandbox Code Playgroud)

通过反复试验,我们剥去了它的部件,以找出问题的原因.我们怀疑它可能是切片器,Power Query/Data Model的使用或命名范围的技巧.但是,这些都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了.令我惊讶的是,我们能够很好地使用数据透视图,它只是引起问题的表格.

有关如何使用EPPlus避免此问题的任何建议?现在,我们继续不使用数据透视表,我们希望让他们在某些时候返回:)

c# excel epplus powerquery

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

将 PDF 中的外部链接转换为链接到 iTextSharp 中的嵌入附件

我有一个有点奇怪的任务。我们即将关闭一个相当大的内部解决方案,并希望一次性导出它所保存的数据。

该解决方案生成 PDF 格式的报告。这些 PDF 主要包含文本,但也包含图像。这些图像是链接,激活后会打开浏览器并指向该图像的全尺寸版本。

由于我们即将关闭底层系统,因此全尺寸图像的外部链接也将停止工作。

由于各种奇怪的原因,我们对报告生成本身的控制有限,因此我们大多仅限于对报告进行后处理。

到目前为止我设计的计划是从系统生成所有必要的报告并通过 iTextSharp 处理它们。我想要实现的“全部”是处理每个 PDF 并且:

  1. 搜索外部链接
  2. 下载链接指向的全尺寸图像并将其作为嵌入文件附加到 PDF
  3. 删除原来的外部链接并替换为相关嵌入资源的链接

我不熟悉 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)

c# pdf-generation itext

5
推荐指数
1
解决办法
1360
查看次数

标签 统计

c# ×2

epplus ×1

excel ×1

itext ×1

pdf-generation ×1

powerquery ×1