【发布时间】:2016-02-06 10:52:13
【问题描述】:
问题:如何读取或修改没有签名的 Excel 文件以让 PHP 正确解析?
对于我的项目,我想使用 PHP 从国家排球协会 (Nevobo) 自动下载并读取 Excel file。下载顺利。读书没有。这个问题似乎与前 8 个字节中没有签名告诉 PHPExcel 它是一个 OLE 文件这一事实有关,因为这样 PHPExcel 将其识别为 CSV 文件,它绝对不是。 Excel 本身可以打开文件,但会强制我将其保存在 different format 中。
我之前从同一来源下载了文件(虽然内容不同),但也没有签名。但是,在这些文件中,我设法过滤了 PHP 中的所有控制字符(\x00 到 \xFF),并在看到日期时自动创建一个新行(因为这些都在 A 列中),不幸的是,没有使用此文件。
function cleanPart ( $part )
{
$part = trim(preg_replace('/[\x00\x01\x03-\x0A\x0D-\x1F\x80-\xFF]/', '', trim($part, ' ')), ' ');
$part = preg_replace('/\x0B/', "\x0C", $part);
$part = preg_replace('/\"/', "\x0C", $part);
$part = preg_replace('/\x0C+/', "\x0C", $part);
$part = preg_replace('/\x0C\x02/', "\x0C", $part);
if ( $part == "\x02\x0C" || $part == "\x02\x0B" ) return false;
$part = trim(preg_replace('/[\x00-\x1F\x80-\xFF]/', "\x02", $part), ' ');
$part = trim(preg_replace('/\x02+/', "\x02", $part), ' ');
$part = trim(preg_replace('/[\x00\x01\x03-\x1F\x80-\xFF]/', '', $part), ' ');
if ( strlen($part) == 0 ) return false;
$part = trim(preg_replace('/\x02/', "", $part), ' ');
return $part;
}
foreach ( explode("\x04", preg_replace('!\x04+!', "\x04", $data)) as $part )
{
if ( ! ( $part = cleanPart($part) ) )
{
continue;
}
// create array
}
【问题讨论】:
-
欢迎来到 SO。请阅读What topics can I ask about 和How to ask a good question 和the perfect question SO 不是免费的编码或教程服务 你必须证明你已经为解决自己的问题付出了一些努力。
-
您正在下载一个带有 xlsx 扩展名的 csv 文件。在不使用服务器端脚本的情况下从 html 构建 excel 的最快方法。 csv有什么问题?你可以在没有phpexcel的情况下用php解析它!这对你来说更容易!
-
该文件当然没有 Excel 签名,但我不知道它到底是什么
-
@RiggsFolly 我编辑了我的帖子以反映我在解析此文件时所做的代码尝试。我也为 unix excel 修复脚本做了很多谷歌搜索,但没有任何成功。有一个网站可以让您上传文件并为您修复它,但与在 Excel 中打开并重新保存相比没有优势。
-
Marco Pontello's identifier 以 100.0% 的把握表明它是 100.0% Targa 位图(原始 TGA 格式)?!?