2

I have a Excel file with forms and controls. As it is not possible to create a Excel file with forms, controls and VBA code from scratch using PHP, I thought I could upload my empty Excel file to the server, update it and then let the user download it.

I know there are some very good PHP classes as PHPExcel, but I don't know if these classes may append data as said. Does anybody has already done this before?

4

5 回答 5

6

换个方向思考!

不是从 php 将数据推送到 excel,而是向 excel 添加一个数据连接,该连接将从 php 端点 taht 发布 xml 检索其数据。

不知道它是否适用,但它更容易实现。

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

最后,如果您最终朝这个方向发展,您将避免所有凌乱的 COM 对象管理。

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

  1. 构建一个发布 XML 数据的 php 端点(我实际上没有 php 知识。只需确保调用yourdata.php将生成 XML 中的数据)。
  2. 在 excel 中,使用数据连接插入此 XML 文件的内容:转到数据选项卡(假设 Excel 2010)、“从其他来源”、“从 Xml 数据导入”。
  3. 让向导完成工作

之后,您将在 Excel 中有一个列表,该列表链接到您的 xml 源。只需右键单击列表/刷新即可获取最新数据(或将数据连接配置为在打开时自动刷新)。

于 2012-07-19T13:15:35.570 回答
3

@SteveB 进一步了解我的评论和您之前的回复..请阅读以下内容。

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

@ihightower:xml 比 CSV 更容易生成(至少使用 .Net 和 C#,这是我的主要编程语言),但我认为这也适用于 CSV。提供 Excel 模板很容易......只需将其作为静态内容提供,因为 Excel 文件不是动态生成的。– 史蒂夫 B


我的发现..

XML 与 CSV

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

将数据连接表转换为“格式为表”时出现的错误是:

 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格式进行导入数据连接...表格格式可以保持这样的截图:

从文件导入到 Excel 的 xml 数据

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

滚动连接的 xml 数据超过一屏

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

把所有部分放在一起

我与我的团队进行了内部讨论,我们认为这对我们真的有用。现在,我们正在就用户操作的交付和流程进行头脑风暴,以交付带有他从 php 生成的数据的 Excel 模板报告。

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

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

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

  1. Sheet:将从php生成的xml数据将被连接并最终进入的数据。
  2. 工作表:摘要。可以使用 Excel 中的所有公式......并根据数据呈现给用户。
  3. Sheet: Pivot可以有基于数据的数据透视表和图表,并且可以在文件打开时自动刷新。
  4. VBA也可用.. 例如,该按钮可用于刷新数据或执行任何其他工作。

我们基本上可以使用 Excel 为我们提供的所有东西。生成的 xml 文件可以留在网络服务器上。数据连接也可以是 URL 或文件。

sourceFile="http://xxxxx/test_data3.csv" 或

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

在此处输入图像描述

需要弄清楚

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

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

  1. 生成唯一的 xml 数据文件(例如 YYYYMMDDHHMMSS_username_pagename.xml)并将其放在某个 tmp 服务器文件夹中。
  2. 将模板文件复制到带有 xml 文件更新连接的 tmp 服务器文件夹(为此,我们需要解压缩 .xlsx 或 .xlsm 文件),使用文件名和文件夹更新 (xl/connections.xml) 中的连接信息: YYYYMMDDHHMMSS_username_pagename.xml 然后将其压缩并通过网络以 .xlsm 或 .xlsx 格式交付给用户

我一步一步手动尝试,它确实有效。

非常感谢您对此的任何想法,以使其真正变得更好并保持简单。

PHPExcel作者@MarkBaker需要反馈:

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

那么,我们是否可以期望 PHPExcel 本身在将来的某个时候可以使用此功能。然后,我们可以更有信心使用 PHPExcel 大师本人的标准技术。

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

请发表您的意见。我很想从您的观点中看到它如何变得更好。

让一切尽可能简单,但不要更简单。艾尔伯特爱因斯坦

于 2012-11-05T06:12:45.473 回答
2

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

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

于 2012-07-19T13:12:47.260 回答
1

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

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

顺便说一句,OpenTBS 还支持 DOCX、PPTX、ODT、ODS、ODP、...

于 2012-07-19T13:14:24.960 回答
0

我认为您实际上无法将append数据写入现有的 excel 文件。

  • 而是将所有数据从 Excel 加载到您的数组中(使用 PHPExcel 很容易);
  • 将数据添加到您的数组中(根据需要对其进行格式化);
  • 创建一个新的 excel 文件并让用户下载它(或保存在原始文件上);

这将模拟附加操作。

于 2012-07-19T13:10:21.413 回答