国产化替代方案_excel表格为什么替换不了

国产化替代方案_excel表格为什么替换不了PHPExcel上一版本1.8.1于2015年发布。该项目已不再维护,可以使用,但是不建议再使用。所有用户都应该迁移到其直接后继者PhpSpreadsheet或其他替代方案。PhpSpreadsheet打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。文档地址:https://phpspreadsheet.readthedocs.io/en/develo…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

PHPExcel上一版本1.8.1于2015年发布。该项目已不再维护,可以使用,但是不建议再使用。所有用户都应该迁移到其直接后继者PhpSpreadsheet或其他替代方案。PhpSpreadsheet打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。

文档地址:https://phpspreadsheet.readthedocs.io/en/develop/

GitHub下载:https://github.com/PHPOffice/PhpSpreadsheet

composer安装:composer require phpoffice/phpspreadsheet

简单入门

<?php
require './vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet = new Spreadsheet();
try {
    $sheet = $spreadsheet->getActiveSheet();
} catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
    echo "==PhpSpreadsheet异常==";
    var_dump($e);
    die;
}
// 按照单元格写入
$sheet->setCellValue('A1','Hello World');
// 按照行列写入,注意行和列都是从1开始的
$sheet->setCellValueByColumnAndRow(1,2,'2行1列');

$writer = new Xlsx($spreadsheet);
try {
    $writer->save('hello.xlsx');
} catch (\PhpOffice\PhpSpreadsheet\Writer\Exception $e) {
    echo "==Writer异常==";
    var_dump($e);
    die;
}

生成的hello.xlsx如下

国产化替代方案_excel表格为什么替换不了

 从内存中清除工作簿

$spreadsheet->disconnectWorksheets(); //如果没有这句,直接运行下面那句会报“内存泄漏”错误
unset($spreadsheet);

PhpSpreadsheet类无法读取和写入持久存储,但是提供了\PhpOffice\PhpSpreadsheet\Reader\IReader和\PhpOffice\PhpSpreadsheet\Writer\IWriter实现了读和写

有两种方法可以将文件读入PhpSpreadsheet

1 自动文件类型解析模式

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("05featuredemo.xlsx");

 如果您需要在阅读器上设置一些属性(例如,只读取数据)

$reader = \PhpOffice\PhpSpreadshee\IOFactory::createReaderForFile("05featuredemo.xlsx");
$reader->setReadDataOnly(true);
$reader->load("05featuredemo.xlsx");

2 显式模式

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load("hello.xlsx");

自动类型解析模式比显式模式稍慢。

阅读电子表格(.xlsx文件)

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load("05featuredemo.xlsx");

 设置单元格的数据

1 按照单元格写入

$sheet->setCellValue('A1','Hello World');

2 按照行列写入,注意行和列都是从1开始的

$sheet->setCellValueByColumnAndRow(1,2,'2行1列');

获取单元格的数据

1 按照单元格读取

$sheet->getCell('A1')->getValue()

2 按照行列写入,注意行和列都是从1开始的

$sheet->getCellByColumnAndRow($column,$row)->getValue()

例子:有一个students.xlsx,内容如下

国产化替代方案_excel表格为什么替换不了

<?php
require './vendor/autoload.php';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load('students.xlsx');

$sheet = $spreadsheet->getActiveSheet();
$highestRow = $sheet->getHighestRow();  // 最大行数
$highestColumn = $sheet->getHighestColumn(); // 最大列数
$highestColumn = "AB";
// 把下标变成数字,如A-Z分别对应1-26,AA对应27,AB对应28,以此类推
$highestColumnIndex = PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);
if($highestRow <= 2){ // 因为students.xlsx表格数据是从第三行开始的
    exit('Excel没有任何数据');
}
$data = array();
for($row = 3;$row <= $highestRow;$row++){
    $tempData['name'] = $sheet->getCellByColumnAndRow(1,$row)->getValue();
    $tempData['chinese'] = $sheet->getCellByColumnAndRow(2,$row)->getValue();
    $tempData['math'] = $sheet->getCellByColumnAndRow(3,$row)->getValue();
    $tempData['English'] = $sheet->getCellByColumnAndRow(4,$row)->getValue();
    $data[] = $tempData;
}
var_dump($data);

 结果如下

国产化替代方案_excel表格为什么替换不了

如果要在students.xlsx添加一行,李四 80 85 90,怎么处理?这也就要引入下面的概念

从模板生成Excel文件(读取,修改,写入)

<?php
require './vendor/autoload.php';

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('students.xlsx');

$sheet = $spreadsheet->getActiveSheet();//李四 80 85 90

$sheet->getCell('A7')->setValue('李四');
$sheet->getCell('B7')->setValue(80);
$sheet->getCell('C7')->setValue(85);
$sheet->getCell('D7')->setValue(90);

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('new_students.xlsx');

生成 new_students.xlsx 内容如下

国产化替代方案_excel表格为什么替换不了

文件下载

$file_name = date('YmdHis').mt_rand(1000,9999).".xlsx"; // 文件名,07Excel文件后缀xlsx,Excel03版本文件xls
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');// 告诉浏览器输出07Excel文件
// header('Content-Type: application/vnd.ms-excel'); // 告诉浏览器将要输出Excel03版本文件
header('Content-Disposition: attachment;filename=' . $file_name ); // 告诉浏览器输出文件名称
header('Cache-Control: max-age=0'); // 禁止缓存
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet,'Xlsx'); //Excel07版本:Xlsx,Excel03版本:Xls
// 个人理解,等同于下面那句
// $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); // Excel07版本:Xlsx,Excel03版本:Xls
$writer->save('php://output');

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192469.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何解决虚拟机连不上网「建议收藏」

    如何解决虚拟机连不上网「建议收藏」通常情况下,电脑关机或重启后需要重新连网,但是,虚拟机下的乌班图通常需要重新连网,很多时候找不到之前连接的网络,如果是宽带连接,首先查看虚拟机的设置,将网络适配器改成Net模式(必要时需要重置,然后重启虚拟机),如果还没有出现要连接的以太网,那么就要查看一下主机的服务中的虚拟机是否已经全部开启,如果没有开启,就要将所有和虚拟机有关的服务启动。…

    2022年6月26日
    32
  • 最全Mac系统快捷键一览

    最全Mac系统快捷键一览Mac中主要有四个修饰键,分别是Command,Control,Option和Shift。这四个键分别有自己的图案,他们经常出现在Mac应用程序中的菜单栏里,方便你随时学习新的快捷键。MAC键盘快捷键符号图例通用Command是Mac里最重要的修饰键,在大多数情况下相当于Windows下的Ctrl。所以以下最基本操作很好理解:Command+Z 撤销Comma

    2022年5月25日
    26
  • 7. MyBatisCodeHelperPro 插件[通俗易懂]

    7. MyBatisCodeHelperPro 插件[通俗易懂]MyBatisCodeHelperPro插件       之前介绍了MyBatis的逆向工程生成实体类、自定义接口以及Mapper.xml的操作过程,很显然这样的配置工作非常繁琐且复杂,本文在介绍MyBatis动态SQL之前,先分享一款实用的MyBatisGenerator插件(MyBatisCodeHelperPro),使用这个插件可以简化开发过程,提高开发者的编码效率。第一步:File→Settings

    2022年9月15日
    5
  • 服务器的系统和NAS有啥区别,nas和云服务器区别「建议收藏」

    服务器的系统和NAS有啥区别,nas和云服务器区别「建议收藏」nas和云服务器区别内容精选换一换没有区别。创建整机镜像有三种方式:使用云服务器创建、使用云服务器备份创建,以及使用云备份创建。使用备份创建镜像与使用云服务器创建镜像原理一样。云服务器创建镜像时,先为云服务器创建备份,再通过备份创建镜像,中间过程为系统自动完成的。所以二者没有区别。云耀云服务器与弹性云服务器的主要区别:云耀云服务器:云耀云服务器是可以快速搭建简单应用的新一代云服务器,云耀云服务器…

    2022年6月30日
    22
  • calendar 月份加减_calendar获取时间

    calendar 月份加减_calendar获取时间calendar类,日期加减Java代码public class test1 {        public static void main(String[] args) {            Calendar c = Calendar.getInstance();            int year=c.get(Calendar.YEAR);                 …

    2022年9月23日
    3
  • pycharm永久激活码2021【中文破解版】

    (pycharm永久激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号