PHPExcel CSV 到 XLSX

2024-01-09

我在将文件从 CSV 转换为 XLSX 格式时遇到问题:

索引.php

<?php
if (!isset($_FILES["file"]))
{
?>
<html>
    <body>
        <h1>Convert CSV to XLSX</h1>
        <form action="index.php" method="post" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit"/>
        </form>
    </body>
</html>
<?php
    exit;
}

//obtain PHPExcel from http://phpexcel.codeplex.com
require_once('Classes\PHPExcel.php');
require_once('CSVToExcelConverter.php');

if ($_FILES["file"]["error"] > 0)
{
    echo "Error: " . $_FILES["file"]["error"];
    exit;
}

try
{
    header('Content-type: application/ms-excel');
    header('Content-Disposition: attachment; filename='.'example.xlsx');

    CSVToExcelConverter::convert($_FILES['file']['tmp_name'], 'php://output');
} catch(Exception $e) {
    echo $e->getMessage();
}

CSVToExcelConverter.php

class CSVToExcelConverter
{
    /**
     * Read given csv file and write all rows to given xls file
     * 
     * @param string $csv_file Resource path of the csv file
     * @param string $xls_file Resource path of the excel file
     * @param string $csv_enc Encoding of the csv file, use utf8 if null
     * @throws Exception
     */
    public static function convert($csv_file, $xls_file, $csv_enc=null) {
        //set cache
        $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

        //open csv file
        $objReader = new PHPExcel_Reader_CSV();
        if ($csv_enc != null)
            $objReader->setInputEncoding($csv_enc);
        $objPHPExcel = $objReader->load($csv_file);
        $in_sheet = $objPHPExcel->getActiveSheet();

        //open excel file
        $objPHPExcel = new PHPExcel();
        $out_sheet = $objPHPExcel->getActiveSheet();

        //row index start from 1
        $row_index = 0;
        foreach ($in_sheet->getRowIterator() as $row) {
            $row_index++;
            $cellIterator = $row->getCellIterator();
            $cellIterator->setIterateOnlyExistingCells(false);

            //column index start from 0
            $column_index = -1;
            foreach ($cellIterator as $cell) {
                $column_index++;
                $out_sheet->setCellValueByColumnAndRow($column_index, $row_index, $cell->getValue());
            }
        }

        //write excel file
        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
        $objWriter->save($xls_file);
    }
}

CSV 文件格式:使用 Excel 打开的 CSV 文件 https://i.stack.imgur.com/EsU8Y.png

转换后得到的 xlsx 文件 https://i.stack.imgur.com/iMGtm.png

基本上我想获得类似于原始 csv 文件的输出,但采用 xlsx 格式,该怎么做?


在 PHPExcel 中读取 CSV 文件的“默认”分隔符是逗号 (,)。您的 CSV 文件使用的不是逗号 - 可能是制表符("\t"),这也常用于此类文件)。

如果这些值不是逗号(并且我们无法从 MS Excel 中查看的文件图像中看出),那么您必须在加载之前明确告诉 PHPExcel 该分隔符是什么。

e.g.

$objReader->setDelimiter("\t");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHPExcel CSV 到 XLSX 的相关文章

  • 如何从 Laravel 中的表中选择所有列名称?

    我试图从表中获取所有列名Teller 功能 public function getTableColumns tables return DB select DB raw SELECT COLUMN NAME DATA TYPE COLUMN
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 当数据验证失败时保留表单字段中的值

    我在弄清楚验证失败时如何保留用户数据时遇到问题 我对 PHP 有点陌生 所以我的逻辑可能会犯一些巨大的错误 目前 如果验证失败 所有字段都会被清除 并且 Post 数据也会消失 这是一些代码 假设用户输入无效电子邮件 我希望保留 名称 字段
  •  
    标记内删除

    我制作了简单的 BBCode 脚本 一切正常 但后来我使用了一个 javascript 库来美化我的代码 pre pre 现在我面临的唯一问题是 br 每行代码后面的标签 pre pre tags 所以问题是我怎样才能删除 br 标记哪些在
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 如果循环中内存超出,我可以在 for 循环中抛出异常吗?

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何处理 foreach 循环中发生
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • C# ui Automation [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试在 C 中自动化 gui 这与浏览器自动化相同吗 我如何启动 ui 自动化 如果您使用 WPF Microsoft 有一个非
  • 如何使用 heroku CLI 连接到选定的应用程序

    我正在尝试在 Heroku 上部署我的 Java Web 应用程序 当我制作教程时 我使用创建了一个应用程序赫罗库创建命令 我们可以说它是 name app1 然后我在教程结束后删除了它并创建了一个新的来部署它 让它成为 new app 但
  • 最新的 CSS 父选择器 [重复]

    这个问题在这里已经有答案了 我能找到的关于此的最新信息是W3C 选择器 4 级编辑草稿 http dev w3 org csswg selectors 4 但是 据我所知 它不再提及父选择器 我知道有一个谷歌对此进行的调查 https do
  • 我的 TableView 中分隔线之前的空白

    我有一个关于 UITableView 的问题 我有一个 UITableViewController 并且创建了一个自定义单元格 当我可视化 tableView 时 我在分隔线之前看到了一点空白 正如您在这个屏幕截图中看到的那样 为什么 这是
  • F# 与 OCaml:堆栈溢出

    我最近发现了一个关于适合 Python 程序员的 F http combiol org fs FSUG FS4PPv2 pptx 看完之后 我决定自己实现一个 蚂蚁谜题 的解决方案 有一只蚂蚁可以在平面网格上走动 蚂蚁一次可以向左 向右 向
  • php 分叉问题

    我有以下测试 php 来执行 fork spawn 过程 其中测试还尝试在完成后杀死子进程 僵尸 我希望有一个更有效的流程 其中任何子进程都会尽快从进程表中删除 当前尝试填满了进程表 并导致内存分配问题 导致系统关闭 该应用程序在 Fedo
  • 读取和写入同一个netcat tcp连接

    假设我写入 netcat 连接 tail f file nc localhost 7050 do whatever nc localhost 7050 这里发生的是我们有两个套接字连接 用于执行一些请求 响应 但由于一些原因 这并不理想 我
  • 如何控制 Flexbox 中每列的项目数?

    在弹性容器中 我有 5 个具有列方向的项目 但在一定宽度下 我想每列显示 3 个项目 并强制其他项目换行有没有办法在没有固定高度的情况下做到这一点 我的代码 div class container div class item 1 item
  • 关键事件不适用于多个 ckeditors

    我有这个jsfiddle http jsfiddle net praveen jegan s47M3 41 当用户在屏幕上键入过滤词时 系统会向用户发出过滤词提醒ckeditor 在我的示例中 过滤后的单词are ants and word
  • LinearSVC和SVC(kernel=“线性”)有什么区别?

    I found sklearn svm LinearSVC http scikit learn org stable modules generated sklearn svm LinearSVC html and sklearn svm
  • Git 只允许从开发合并到主控

    我希望能够设置我们的分支 以便合并只能从开发分支进入主分支 我知道这听起来可能很严厉 我应该问自己一个问题 我是否不信任团队中的开发人员 目前我不信任 因为他们刚刚熟悉 Git 我会及时取消该限制 但在那之前这将很有用 是否可以 谢谢 标记
  • oidc-client-js 回调后无状态响应

    我认为这是与 Angular 5 2 8 6 相关的错误 与 Angular 5 2 7 一起工作正常 我创建一个ng5分支 https github com client sdk samples sample angular OidcCl
  • 如何在不通过 PhoneApplicationPage 的情况下访问 WIndows Phone 应用程序中的 NavigationService?

    如何在不通过 PhoneApplicationPage 的情况下访问 Windows Phone 应用程序中的 NavigationService 我的目标是在启动时将其传递给应用程序的主要视图模型 这种技术在 WPF 和 Silverli
  • 使用 LINQ 自动生成类型的简洁参数化查询

    我在工作中结合使用 LINQ 和 Dapper 出于性能原因 我正在用 Dapper 替换我的 LINQ 代码 我有很多通过从 SQL Server 拖放到 Visual Studio 数据库图表中创建的 LINQ 数据对象 在下面的实例中
  • 如何在 Twig 模板中使用 Mustache?它们都有相同的标签分隔符

    我在我的项目中使用 Twig 它使用这些标签 name 我也想将 Mustache 包含在我的项目中 但小胡子也使用相同的标签 name 所以存在冲突并且没有任何效果 Mustache 在他们的文档中提供的解决方案当然不起作用 因为我必须输
  • Gevent猴子解锁

    我正在分多个步骤执行我的程序 其中之一是使用gevent Monkey patch from gevent import monkey monkey patch all 一切都很好 但是我用完之后可以取消补丁吗 我想返回到我的默认套接字函数
  • 实际上,如何从工作区中的目录中删除文件,而这些文件不属于工作区?

    如果我要删除的文件不属于工作区 那么如何从工作区的目录中删除文件 我的文件系统上有一个目录 其中包含从 perforce 获取的文件 但在某些进程运行后 它会在这些目录中创建一些新文件 是否有 perforce 命令可以删除这些生成的不属于
  • 如何调试“4005 路径未找到”错误?

    我正在尝试将 Pusher 与使用 Backbone js 的 Web 应用程序集成 我正在遵循 Pusher 文档中的 Pusher with Backbone 指南 因此 我在应用程序启动时看到 Web 控制台中弹出此错误 Pusher
  • 如果我打开一个已经在 C++ 中打开的文件会发生什么

    想象一下我声明了一个输出文件 如果我用这段代码打开它两次会发生什么 它还可以工作吗 ofstream outfile outfile open record txt std ofstream app outfile open record
  • PHPExcel CSV 到 XLSX

    我在将文件从 CSV 转换为 XLSX 格式时遇到问题 索引 php h1 Convert CSV to XLSX h1