代码之家  ›  专栏  ›  技术社区  ›  Theo

从linux下载的xls与从windows下载的不一样

  •  1
  • Theo  · 技术社区  · 9 年前

    我有一个非常奇怪的问题……为什么我用php创建的xls文件与从linux服务器下载时和从windows服务器下载时不一样?

    使用jsi解析html表,过滤出一些列并将表推送到表单中,然后将其提交到php脚本。在脚本中,我回显了一个带有特定头的xml文件。当我用xampp在windows上执行此操作并下载并打开文件时,我从excel收到一条消息,内容和文件类型不匹配,但我可以打开它。当我从linux服务器下载相同的文件(新生成的具有相同内容的文件)时,我无法打开该文件,甚至消息也没有出现。

    编辑 : 当我用记事本++打开文件(我从linux下载的),更改一行,撤消并保存此操作时,excel可以打开文件(显示内容和文件类型不匹配的消息)。

    以下是一些代码供您理解:

    // var filename = string
    // var this table = previously parsed html table
    $('<form target="_blank" action="download.php" method="post"><input type="hidden" name="filename" value="' + encodeURIComponent(filename) + '" /><input type="hidden" name="data" value="' + encodeURIComponent(thisTable) + '" /></form>').appendTo($('body')).submit().remove();
    

    PHP部分:

    <?php
     header('P3P: CP="NOI NID ADMa CAO PSA OUR IND UNI COM NAV"');
     header("Content-Type: application/ms-excel");
     header("Content-Disposition: attachment; filename=\"".$_REQUEST['filename'].".xls\";");
     echo "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">";
     echo "<head>";
     echo "<!--[if gte mso 9]>";
     echo "<xml>";
     echo "<x:ExcelWorkbook>";
     echo "<x:ExcelWorksheets>";
     echo "<x:ExcelWorksheet>";
     echo "<x:Name>".$_REQUEST['filename']."</x:Name>";
     echo "<x:WorksheetOptions>";
     echo "<x:Panes>";
     echo "</x:Panes>";
     echo "<x:PageSetup>";
     echo "<x:Layout x:Orientation=\"Landscape\"/>";
     echo "</x:PageSetup>";
     echo "</x:WorksheetOptions>";
     echo "</x:ExcelWorksheet>";
     echo "</x:ExcelWorksheets>";
     echo "</x:ExcelWorkbook>";
     echo "</xml>";
     echo "<![endif]-->";
     echo '<style type="text/css">td{mso-number-format:"#\,##0\.00";} @page {mso-page-orientation:landscape;}</style>';
     echo "</head>";
     echo "<body>";
     echo utf8_decode(urldecode($_REQUEST['data']));
     echo "</body>";
     echo "</html>";
    ?>
    

    谢谢你的帮助!

    1 回复  |  直到 9 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    可能是来自Linux的文件被“阻止”,因为该文件来自未知的计算机。如果你在Windows中查看文件的属性,底部可能会有一条关于安全性和“解锁”能力的消息。因为您编辑并保存了Linux文件,Excel现在认为它是来自Windows计算机的安全文件,因此不会被阻止。

    文章 https://superuser.com/questions/1103241/excel-no-longer-receive-the-option-to-open-files-in-a-different-format 说明了Microsoft最近的一个“修补程序”引入了此限制(用于Excel 2010的Windows Update KB3115130和用于Excel 2013的Windows Update KB3115262),以及以下帮助选项:

    选项1

    • 控制面板>Internet选项
    • 安全选项卡>受信任的站点
    • 将下载的站点添加到受信任的站点列表

    选项2

    • 进入已保存到计算机的文件的属性(右键单击该文件,然后左键单击属性)
    • 单击取消阻止
    • 单击应用
    • 打开文件

    • 打开Excel转到文件选项
    • 单击信任中心->信任中心设置

    选项4

    • 打开Excel转到文件选项
    • 单击信任中心->信任中心设置
    • 转到文件块设置
    • 取消选中网页和Excel 2003 XML电子表格

    • 卸载前面提到的适用于您的Office版本的更新
    推荐文章