使用 PHPExcel 读取包含合并单元格的 Excel 工作表

2024-01-31

我想完整地阅读 Excel 工作表并使用 AJAX 将每一行发送到另一个页面进行处理。因此,我使用以下代码将 Excel 工作表数据转换为 JSON 数组(参考库中提供的 PHPExcel 示例):

<?php
error_reporting(E_ALL);
set_time_limit(0);

date_default_timezone_set('Asia/Kolkata');
set_include_path(get_include_path() . PATH_SEPARATOR . 'PHPExcel-1.8/Classes/');
require_once 'PHPExcel/IOFactory.php';

$inputFileType = PHPExcel_IOFactory::identify($fileLocation);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setLoadSheetsOnly("SHEETNAME");
$objPHPExcel = $objReader->load($fileLocation);

$data = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
?>

Here $filelocation是要读取的上传文件的位置,以便使用 AJAX 将行单独发送到另一个页面。 我在用$data在 JavaScript 中为

DataToBeUploaded=<?php echo json_encode($data);?>;

但是 Excel 工作表包含一些合并单元格,因此 PHPExcel 无法读取这些合并单元格中的值。因此,这些单元格中的值被读取为 NULL。

有没有办法可以将合并单元格的左上角单元格值用于所有后续单元格? (实际上在我的例子中,单元格仅垂直合并)

例如。 我有(假设行从 1 开始编号,列从 A 开始编号)

这里 PHPExcel 读作:

data[1][A]='abc'
$data[1][B]='123'

$data[2][A]=''
$data[2][B]='456'

$data[3][A]=''
$data[3][B]='789'

我希望代码片段产生这些值:

data[1][A]='abc'
$data[1][B]='123'

$data[2][A]='abc'
$data[2][B]='456'

$data[3][A]='abc'
$data[3][B]='789'

参考https://github.com/PHPOffice/PHPExcel/issues/643 https://github.com/PHPOffice/PHPExcel/issues/643

我写了以下片段:

$referenceRow=array();
for ( $row = 2; $row <= $noOfBooks; $row++ ){
     for ( $col = 0; $col < 7; $col++ ){
         if (!$objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->isInMergeRange() || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->isMergeRangeValueCell()) {
             // Cell is not merged cell
             $data[$row][$col] = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->getCalculatedValue();

             $referenceRow[$col]=$data[$row][$col];  
             //This will store the value of cell in $referenceRow so that if the next row is merged then it will use this value for the attribute
          } else {
             // Cell is part of a merge-range
             $data[$row][$col]=$referenceRow[$col];  
             //The value stored for this column in $referenceRow in one of the previous iterations is the value of the merged cell
          }

      }
 }

这将给出完全符合要求的结果

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

使用 PHPExcel 读取包含合并单元格的 Excel 工作表 的相关文章

  • 使用 ClosedXML 创建数据透视表

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • 通过 Excel / VBA 调用 DLL 中的 C++ 函数在传递双参数时生成异常

    我试图通过 DLL 在 Excel VBA 中使用 C C 静态函数 我在 VS17 中调试时遇到异常 我怀疑这是参数传递方式的问题 它是双精度 EXCEL EXE 中 0x00007FFA28BBA14F kernel32 dll 处抛出
  • 使用 VBA 将 Excel 电子表格中嵌入的 Word 文档保存到磁盘

    我们有一个 Excel 电子表格 当前使用存储在公司 LAN 上的 Word 模板生成报告 这对于内部用户来说效果很好 但对于没有连接到 LAN 的任何人来说就不行了 例如 笔记本电脑用户 管理层不希望将模板作为单独的文件分发给外部用户 而
  • get url 重定向时 File_get_contents() 不起作用

    我正在使用的功能是 function http post url data data url http build query data data len strlen data url date default timezone set
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • Mysqli 更新抛出 Call to a member function bind_param() 错误[重复]

    这个问题在这里已经有答案了 我有一个 70 80 字段表单 需要插入到表中 因此我首先根据表单中的输入名称在数据库中创建了一个表 而不是手动创建一个巨大的插入语句 这是我使用的代码创建 更改表 function createTable ar
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • 如何修复日期过滤器 VBA,因为它没有拾取我范围内的所有日期

    我正在尝试创建一个过滤器来过滤掉我选择的日期内的所有日期 我选择的日期将始终反映整个月 例如 如果我需要 2019 年 5 月的数据 我将输入开始日期为 01 05 2019 结束日期为 31 05 2019 我的数据过滤器将需要选取经过我
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get

随机推荐

  • 使用 Powershell 将文件检入 TFS

    作为持续集成构建的一部分 我正在创建一个 SQL 脚本 该 SQL 脚本生成后必须重新签入 TFS 我在 Powershell 中使用 TFS Powertools 我在我的机器上使用的代码是 Add TfsPendingChange Ad
  • iOS 7 UIWebView 304 缓存错误,空白页

    我在具有 UIWebView 的应用程序中发现了一个问题 iOS 7 缓存了空白正文 304 响应 导致用户刷新 UIWebView 时显示空白页面 这不是良好的用户体验 我正在尝试找出如何在 iOS 端解决此问题 因为我无法控制 Amaz
  • unmodifierList 线程安全吗?

    我有一个字符串 tagList 列表 需要在多个线程之间共享以供读取 因此我创建了它的不可修改版本并将其传递给线程 我不确定它是否是线程安全的 因为线程只读取该列表 所以我猜应该可以吧 另外 当我将不可修改的列表传递给线程时 它是传递单个副
  • 将自纪元以来的时间戳转换为 datetime.datetime

    自纪元以来我有以下时间戳 Timestamp 1346114717972 1354087827000 如何将这些时间戳转换为某种特定的输出格式 例如mm dd yyyy hr min sec 我尝试将它们转换为datetime dateti
  • 如何为 RabbitMQ 连接设置自定义名称?

    能够通过连接名称识别 RabbitMQ 客户端将非常有用 我正在使用 Spring Cloud Streams 抽象 并且使用默认设置我得到类似的东西 如何在 Spring Boot 客户端中设置自定义 RabbitMQ 连接名称 EDIT
  • Gridview 中的 TimeSpan DataFormatString

    我有一个带有来自 linq 查询的 ObjectDataSource 的 gridview 源的变量之一是时间跨度 我将绑定字段与 DataField MyTimeSpanVariable 绑定 数据包含以秒和分钟为单位的时间 很少以小时为
  • EF5 收到此错误消息:无法检查模型兼容性,因为数据库不包含模型元数据

    每次运行该应用程序时 都会显示此错误消息 我正在使用实体Framework 5 Code First 这是错误消息 System NotSupportedException Model compatibility cannot be che
  • 分布式 Elixir 示例不起作用

    我有一个非常简单的 Elixir 代码示例 我想在不同的节点上运行 第一个节点位于我的笔记本电脑上 第二个节点是 Raspberry Pi 通过 SSH 访问 代码很简单 node1 my computer defmodule Hello
  • Visual Studio 和 SQL Server - 安装顺序正确吗?

    我正在重建我的开发机器 这个问题对我来说并不新鲜 但我不记得解决方案 我从 SQL 2008 Developer 开始 然后是 VS 2008 Pro SQL SP1 VS SP1 结果是我无法打开SSIS项目 参见下面的错误 正确的顺序是
  • 监听 Flutter 中的 API 变化

    假设我有一个 API 它提供一个返回 id 和名称的 JSON 响应 在移动应用程序中 通常我会发出一个 http GET 响应 以便在与服务器的一次性连接中获取此数据 并在应用程序中显示结果 但是 如果数据随着时间的推移而变化 并且我想在
  • 如何在asp.net中显示Page_Load函数中设置的变量值

    我有一个从数据库获取的变量 我想在 html 之间的 aspx 页面中输出该变量 我试图将其公开 但它显示一些错误 如何在其 aspx 页面中使用页面加载函数中设置的变量 第一种方式 您将 Literal 控件放置在要显示变量的位置 然后在
  • 带有选项的简单选择标签在 Chrome 上不起作用

    我遇到了这个问题 我无法在我的 chrome 上扩展这个简单的选择标签
  • 在应用程序中使用多个网络接口

    我编写了一个应用程序 通过 wifi 触发索尼 qx 智能手机可连接相机 但是 我需要通过另一个本地网络实时传输手机上的图像 由于 wifi 卡用于 qx 连接 我需要能够通过 USB 使用以太网从手机传输图像 HTTP 请求将用于触发相机
  • 当手动将进度设置为 MotionLayout 时,它会清除所有约束

    我有带有两个小部件的 MotionLayout 一个在 MotionLayout 中描述 第二个在场景文件中描述 布局文件
  • 如何获取用户控件数据类型所在的TabPage

    我正在使用用户控件包装器方法构建自定义数据类型 我在其中添加现有的 TinyMCE 数据类型 问题是我需要找到一种方法来动态获取数据类型所在的当前 TabPage 以便我可以将 TinyMCE 按钮添加到菜单中 这就是我目前所拥有的 Tab
  • 使用 Ajax 和 PHP $_FILES 从 Canvas 元素发送图像

    我需要能够将图像和一些表单字段从客户端画布元素发送到 PHP 脚本 最终以 POST 和 FILES 结束 当我这样发送时
  • 将 Haskell 线程与内核线程进行比较 - 我的基准测试可行吗?

    这实际上是我的大学项目 在我的文章中 我需要提供证据证明 Haskell 线程的创建速度比普通内核线程更快 我知道最好参考一些研究论文 但重点是我必须自己进行基准测试 这是我的想法 我用 C 使用 pthreads 和 Haskell 编写
  • 错误“HttpServletRequest 引用了缺失的 String 类型”

    我正在 struts 中实现一个项目 其中 JSP 页面出现错误 我已经在 Eclipse IDE 中配置了 Tomcat 6 JRE 和 JDK 6 代码是 request getContextPath 错误是 The method ge
  • PHP 依赖注入

    我正在尝试了解依赖注入 并且在很大程度上我理解它 然而 如果由于某种原因 我的一个类依赖于多个类 而不是将所有这些都传递给构造函数中的这个类 是否有更好 更明智的方法 我听说过 DI 容器 这是我解决这个问题的方法吗 我应该从哪里开始使用这
  • 使用 PHPExcel 读取包含合并单元格的 Excel 工作表

    我想完整地阅读 Excel 工作表并使用 AJAX 将每一行发送到另一个页面进行处理 因此 我使用以下代码将 Excel 工作表数据转换为 JSON 数组 参考库中提供的 PHPExcel 示例