【问题标题】:Edit file on server from a webpage从网页编辑服务器上的文件
【发布时间】:2015-11-07 19:47:45
【问题描述】:

我想做的是在我的网页上有一组可编辑的 Excel 文件:

  • 我提供了指向用户代表 Excel 文件的链接
  • 点击后,用户用于编辑 Excel 文件的默认程序(例如 MS Excel)应打开
  • 编辑完成后,该文件应该为用户透明地上传到我的服务器,并且下次用户访问我的页面时,他们应该会看到他们编辑的文件并能够再次编辑它

我所考虑的:

  • JavaScript 类似 Excel 的网格。但是,我没有找到具有足够功能的 JavaScript 库,例如轻松移动行(有什么好的 JavaScript Excel 组件建议吗?)
  • 使用他们的 API 保存到 DropBox / Google Docs /...。但是,它要求用户拥有一个帐户,并且可能需要我管理用户的 DropBox 密码(并非所有用户都希望与我共享密码)。此外,我还需要与 Google Drive、Miscrosoft OneDrive 以及其他多少服务的接口。
  • 允许用户下载文件并依赖用户重新上传。但是,这对用户来说太复杂了,用户会忘记上传文件,这意味着他们的编辑会丢失。有什么方法或在关闭时自动上传文件?
  • 我的 Excel 文件中的一个宏,它会在退出前联系我的服务器。但是,这需要用户启用宏(安全警报),并且如果连接中断,则可能不可靠。我没有评估这在技术上是否可行。

或者实现这一目标的最佳/最简单方法是什么?

(我知道如何生成 Excel 文件以及如何从网页打开它们;我的问题是如何为用户透明地将用户的编辑内容返回到服务器。)

【问题讨论】:

  • "允许用户下载文件,依赖用户重新上传回来。但是这样对用户来说太复杂了,用户会忘记上传文件,这意味着失去他们的编辑。任何方式或在关闭时自动上传文件?” 为什么选择保存文档会“复杂”?当用户选择保存文件时上传文件? ,或用户“关闭”文档的哪个部分?
  • "当用户选择保存文件时上传文件?" -- 你的意思是从 Excel 文件中的 VBA 脚本上传到服务器?
  • 1) 用户点击打开excel编辑器; 2)当编辑完成时,用户选择在html文档上传编辑过的文件
  • @guest271314 "2) 当编辑完成时,用户选择在 html 文档中上传编辑过的文件" -- 会很完美,但是如何?可以透明地完成吗? (我的用户不应该知道如何在 Downloads 或 Temp 文件夹中找到下载的文件,或者如何从他们的 Downloads 文件夹中删除临时文件。)
  • "可以透明地完成吗?(我的用户不应该知道如何在 Downloads 或 Temp 文件夹中找到下载的文件,或者如何从他们的 Downloads 文件夹中删除临时文件。)" ?不确定是否正确解释“透明”?不,不能以编程方式从用户文件系统中选择用户文件。不确定如何不能期望用户在“下载”或“临时”文件夹中找到下载、编辑的文件,但同时能够或期望编辑相同的 excel 文件?

标签: javascript php vba server client-server


【解决方案1】:

我认为最简单的方法(“为用户透明地将用户的编辑返回到服务器”)是对 PHP 脚本使用 AJAX (JS) 请求。

AJAX 非常适合在后台(异步)执行操作,但它不能编辑服务器。只需在 JS 中添加一个事件监听器(可能是 onchangeonblur)并在用户每次编辑文件时发送 AJAX 请求。

PHP 是一种出色的服务器端脚本语言,您可以使用它来编辑文件。


编辑:示例(根据要求)

为了简单起见,假设 Excel 文件存储在 <textarea> 中的字符串中(目前),您可以设置一个侦听器以从中获取数据(在 jQuery 中),并发送 AJAX 请求:

HTML:

<textarea id="excel"></textarea>

JS:

$("#excel").change(function() {
    var excelFile = $(this).val();
    $.ajax({
        url: "updateFile.php",
        method: "post",
        data: { data: excelFile }
    });
});

PHP (updateFile.php):

<?php
    $data = $_POST["data"];
    $file = fopen("FILENAME.xlsx", "w+");
    fwrite($file, $data);
    fclose($file);
?>

【讨论】:

  • 谢谢!你能提供更多细节吗?我知道如何使用 Ajax。如果用户在客户端使用 MS Excel,我的脚本如何知道他何时完成编辑以及如何获取编辑后的文件?如果用户在浏览器中编辑文件,那么你能推荐一个足够好的 JavaScript 组件,比如允许移动行吗?
  • @AlexanderGelbukh 我马上举个例子,别着急!
  • 我猜你可以编写自己的 JS 组件。我不知道任何事情,也不知道 Excel 文件是如何工作的,但如果你知道,我想你可以。
  • 是的,我考虑过一个组件,但我负担不起从头开始重写 Google Docs :-) 我已经测试过 blueshoes.org/en/javascript/spreadsheethandsontable.com/examples.html
  • 这些组件看起来很不错,但您只需要知道如何使用它们并将它们的所有数据检索到一个漂亮整洁的字符串变量(excelFile JS 变量)中。如果你能做到这一点,那么剩下的代码就可以工作了。
猜你喜欢
  • 1970-01-01
  • 2012-08-01
  • 2011-07-17
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2013-03-15
  • 2019-12-12
相关资源
最近更新 更多