gpt4 book ai didi

php - 在 Office 2010 (Excel.Application) 中使用 PHP 的 COM 对象

转载 作者:搜寻专家 更新时间:2023-10-31 21:45:40 25 4
gpt4 key购买 nike

我最近使用 COM 对象在 PHP 中编写了一个脚本,将 Excel 2007 电子表格中单元格中的数据剥离到一个数组中。这一切都是在装有 Office 2007 的 XP 系统上本地完成的。一旦我启用了 Apache 服务器与桌面交互,该脚本就像一个绝对的梦想,允许我通过 PHP 用数组值填充我的 HTML。

现在我们刚刚升级到 Win 7 x64 和 Office 2010 32 位 - 相同的脚本现在向我抛出 COM_exception:

'Microsoft Excel cannot access' the xml/xmlx file (it worked for both previously). "There are several possible reasons:

  • The file name or path does not exist.
  • The file is being used by another program.
  • The workbook you are trying to save has the same name as a currently open workbook"... apparently.

我已经禁用了 UAC,认为这是罪魁祸首,当然允许 Apache 与桌面交互,但 Excel 进程甚至没有尝试启动。我猜 Windows 7 根本不允许脚本与 Excel 交互。还有其他脚本可以使用类(例如 PHPExcel),但是我宁愿避免编写接收者代码,而且我什至不知道这些类是否适用于 Excel 2010。

我怎样才能克服这个com_exception

代码:

<?php
error_reporting(E_ALL);

function getDataFromExcel($file, $sheet, $rows, $cols)
{
// COM CREATE
fwrite(STDOUT, "----------------------------------------\r\n");
$excel = new COM("Excel.Application") or die ("ERROR: Unable to instantaniate COM!\r\n");
$excel->Visible = true; // so that we see the window on screen
fwrite(STDOUT, "Application name: {$excel->Application->value}\r\n") ;
fwrite(STDOUT, "Loaded version: {$excel->Application->version}\r\n");
fwrite(STDOUT, "----------------------------------------\r\n\r\n");

// DATA RETRIEVAL
$Workbook = $excel->Workbooks->Open($file) or die("ERROR: Unable to open " . $file . "!\r\n");
$Worksheet = $Workbook->Worksheets($sheet);
$Worksheet->Activate;
$i = 0;
foreach ($rows as $row)
{
$i++; $j = 0;
foreach ($cols as $col)
{
$j++;
$cell = $Worksheet->Range($col . $row);
$cell->activate();
$matrix[$i][$j] = $cell->value;
}
}

// COM DESTROY
$Workbook->Close();
unset($Worksheet);
unset($Workbook);
$excel->Workbooks->Close();
$excel->Quit();
unset($excel);

return $matrix;
}

// define inputs
$xls_path = "D:\\xampp\\htdocs\\path_to_document\\test.xls"; // input file
$xls_sheet = 1; // sheet #1 from file
$xls_rows = range(3, 20, 1); // I want extract rows 3 - 20 from test.xls with 1 row stepping
$xls_cols = array("B", "D", "E", "G"); // I want to extract columns B, D, E and G from the file

// retrieve data from excel
$data = getDataFromExcel($xls_path, $xls_sheet, $xls_rows, $xls_cols);

?>
<html>
<pre>
<?php print_r ($data);?>
</pre>
</html>

最佳答案

我认为您的问题很可能是 Apache 没有 DCOM 组件的权限。以管理员身份打开 DCOMCNFG.EXE。浏览器到计算机 -> 我的电脑 -> DCOM 配置并找到“Microsoft Excel 应用程序”组件。右键单击它并选择“属性”,然后转到“安全”选项卡。

我可能有点懒惰,所以我倾向于将 httpd 权限授予所提供的所有三个选项,而不是费心去了解每个选项何时适用。将单选按钮设为“自定义”,然后点击“编辑”按钮,按照标准 Windows 对话框为您的 httpd 运行的用户/角色添加权限。

关于php - 在 Office 2010 (Excel.Application) 中使用 PHP 的 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4137260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com