如何使用PHP将数据添加到现有的Excel文件中?

时间:2012-07-19 13:08:20

标签: php excel-vba vba excel

我有一个包含表单和控件的Excel文件。由于无法使用PHP从头开始创建包含表单,控件和VBA代码的Excel文件,我想我可以将空的Excel文件上传到服务器,更新它然后让用户下载它。

我知道有一些非常好的PHP类作为PHPExcel,但我不知道这些类是否可以附加数据。有没有人以前做过这个?

5 个答案:

答案 0 :(得分:5)

从另一个方向思考!

不是将数据从php推送到excel,而是将数据连接添加到excel,它将从php端点taht publish xml中检索其数据。

不知道它是否适用,但实施起来要容易得多。

此外,您将完全控制excel文件,保留所有自定义,包括VBA。

最后,如果你朝这个方向走,你将避免所有混乱的COM对象管理。

[编辑]此解决方案的步骤:

  1. 构建一个发布XML数据的php端点(我实际上没有PHP知识。只需确保调用yourdata.php将以XML格式生成数据。)
  2. 在Excel中,使用数据连接,插入此XML文件的内容:转到数据标签(假设是Excel 2010),“从其他来源”,“从Xml数据导入”。
  3. 让向导完成工作
  4. 之后,您将在Excel中有一个列表,而不是链接到您的xml源。只需右键单击列表/刷新以获取最新数据(或将数据连接配置为在打开时自动刷新)。

答案 1 :(得分:3)

@SteveB继续我的评论和您之前的回复..请参阅下文。

  

@SteveB看起来是个好主意......但为什么要使用xml?我尝试使用   xml,但我不知道在文本文件中写入xml的格式是什么?能够   你解释一下。我们还可以使用.csv吗?因为它看起来很容易   简单的.csv文件。整个解决方案将如何运作...说我是   用户..谁点击并打开一个php页面..以及excel应该在哪里   存储模板..以及它将如何弹出给用户..什么时候发生   另一个用户连接到同一页面等。我想保留数据透视表,   excel宏和vba,模板文件中的图像和图表。 -   ihightower

     

@ihightower:xml比CSV更容易生成(至少使用.Net   和C#,这是我的主要编程语言),但这可行   我认为还有CSV。提供Excel模板很简单......简单   将其作为静态内容提供,因为excel文件不是动态的   产生。 - 史蒂夫B


我的结论......

XML与CSV

导入的CSV格式仅在不需要Excel表格格式时才有效。您不能突出显示备用行,滚动期间可用列标题等。 总之,对于我发现你不能同时拥有外部数据和表格格式。

您将数据连接表转换为"格式为表"的错误是这样的:

 Your selection overlaps one or more external data ranges.
 Do you want to convert the selection to a table and remove
 all external connection?

当然,我不希望这样......但是使用xml格式进行数据连接......表格格式可以像这样截图:

xml data imported from file to Excel

并且,当您滚动过去一个屏幕时...屏幕将如下所示..您可以看到列标题A,B,C自动转换为数据标题(ISBN,日期,标题,... )

scrolling the connected xml data past one screenfull

所以,我们应该寻找一个xml解决方案..我们正在弄清楚如何使用php。但是,使用CSV进行测试,大约有10列x 20,000行数据..它非常好用。来自Web服务器的刷新也非常有效。

放入All Piece Togeter

我与我的团队进行了内部讨论,我们认为这对我们非常有用。现在,我们正在集思广益于用户操作的交付和流程,以便使用他从php生成的数据提供Excel模板报告。

好的..我们开始时有什么?

  • Excel模板(例如staff_analysis_template.xlsm)。这将包含所有数据透视表,excel宏,按钮,图像,图表,以及excel文件可以拥有的所有内容。
  • 在模板文件中,将有一个名为" data"的工作表。这是xml或csv导入最终将成为...文件中所有数据透视表和图表的随时可用。
  • 一个php网页,其中包含用于过滤数据的列表框和文本字段..他将点击搜索...这将提供网页结果和链接以查看相同的数据包含所有结果数据的Excel模板文件:数据。

这是带有示例数据的Excel模板..在此屏幕截图中......您可以看到

  1. 工作表:数据,其中从php生成的xml数据将被连接并最终进入。
  2. 工作表:摘要。可以使用Excel中的所有公式...和 呈现给用户,该用户基于数据。
  3. Sheeet:Pivot 可以拥有基于的数据透视表和图表 数据,可以在文件时自动刷新 打开..
  4. VBA 也可用..例如按钮可用于 刷新数据或进行任何其他工作。
  5. 我们可以基本使用Excel为我们提供的所有内容。生成的xml文件可以保留在Web服务器上。数据连接也可以是URL或文件。

    的SourceFile =" HTTP://xxxxx/test_data3.csv"或

    sourceFile =" C:\ Users \ Fiaz \ Documents \ Magic Briefcase \ Learn \ excel \ test_data3.csv"

    enter image description here

    需要弄清楚

    尚未弄清楚的部分是如何将这一切与无缝的用户体验连接在一起..即用户不应该首先强制保存文件或手动连接xml等.excel模板必须在那里打开所需的数据和所有可用的分析。如果用户需要保存它,他将使用另存为并复制到本地计算机。

    我们对这种无缝用户体验的想法是这样的:

    1. 生成唯一的xml数据文件(例如YYYYMMDDHHMMSS_username_pagename.xml)并将其放在某个tmp服务器文件夹中。
    2. 将模板文件复制到具有xml文件更新连接的tmp服务器文件夹(为此我们需要解压缩.xlsx或.xlsm文件),用文件更新(xl / connections.xml)中的连接信息名称和文件夹:YYYYMMDDHHMMSS_username_pagename.xml然后压缩并通过网络传递给用户.xlsm或.xlsx
    3. 我一步一步地尝试了它,它确实有效。

      对于任何有关此问题的想法,我们将非常感激,以使其变得更好并且仍然保持简单。

      PHPExcel作者@MarkBaker所需的反馈:

        

      @MarkBaker:阅读其他帖子中的评论   PHPExcel,我知道我们不能使用PHPExcel做同样的事情   (即使用原始的excel模板)。所以,解决方案   SteveB建议并由我在上面阐述似乎更多   为此目的有力。我们可以保留原始的Excel模板   与所有资产(数据透视表,vba等)保持原样的文件。服务器需要   也没有Excel。

           

      因此,我们可以期待此功能在将来的某个时间可用于PHPExcel。然后我们可以更自信地使用   PHPExcel大师自己的标准技术。

           

      在我看来,PHPExcel对发票类型的报告和许多其他报告非常有用   不适用于商业智能类型的分析......这需要使用数据透视表和复杂的图表和代码等。

           

      请发表您的意见..我将非常有兴趣从您的角度看待它如何做得更好。

      让一切尽可能简单,但并不简单。阿尔伯特爱因斯坦

答案 2 :(得分:2)

使用PHPExcel添加很容易 - 加载文件,在最后一行之后添加数据,保存文件......遗憾的是,不支持表单和VBA代码。

要保留这些内容,您需要使用COM,这会将您限制为安装了MS Excel的Windows服务器。

答案 3 :(得分:0)

我认为您实际上不能append数据到现有的Excel文件。

  • 而是将Excel中的所有数据加载到您的数组中(使用PHPExcel很容易);
  • 将数据添加到您的阵列(根据需要格式化);
  • 创建一个新的Excel文件,让用户下载(或保存原文);

这将模拟追加行动。

答案 4 :(得分:0)

OpenTBS是一个PHP类PHP,它使您能够使用模板技术构建XLSX(或XLSM,即带有VBA宏的XLSX)文档。

填充工作表非常容易。 您也可以编辑表单和VBA,因为您知道它们的XML结构。

顺便提一下,OpenTBS还支持DOCX,PPTX,ODT,ODS,ODP,......