Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >导入Excel数据到web系统

导入Excel数据到web系统

原创
作者头像
gglinux
修改于 2019-04-28 11:54:55
修改于 2019-04-28 11:54:55
1.3K0
举报
文章被收录于专栏:gglinux.comgglinux.com

承接上篇

处理中-内容的处理

设置reader和编码
代码语言:txt
AI代码解释
复制
$file_path = 'test.xls';
$excel5_reader = new PHPExcel_Reader_Excel5();
$excel5_reader->_defaultEncoding = $encoding;
$excel2007_reader = new PHPExcel_Reader_Excel2007();
$excel2007_reader->_defaultEncoding = $encoding;
$reader = null;

if($excel5_reader->canRead($file_path)) {
	$reader = $excel5_reader;
} elseif($excel2007_reader->canRead($file_path))  {
	$reader = $excel2007_reader;
} else {
	return array();
}
处理多sheet和遍历内容
  • 核心方法:$all_sheets = $table_object->getAllSheets();
代码语言:txt
AI代码解释
复制
$table_object = $reader->load($file_path);
$all_sheets = $table_object->getAllSheets();
$i = 0;
foreach ($all_sheets as $key => $sheet_obj) {
    $sheet_title = $sheet_obj->getTitle();
	$row_iterator = $sheet_obj->getRowIterator();
	foreach ($row_iterator as $k1 => $row_obj) {
	    $cell_iterator = $row_obj->getCellIterator();
	}
}
处理样式
  • 核心方法: $cell_obj->getStyle();
  • 下述方法为转化为css标准样式,可以直接拿来使用
代码语言:txt
AI代码解释
复制
$style_object = $cell_obj->getStyle();
$style = [];//css标准样式

$fill_object = $style_object->getFill();
$font_object = $style_object->getFont();
$borders_object = $style_object->getBorders();
$alignment_object = $style_object->getAlignment();

$fill_type = $fill_object->getFillType();

if (PHPExcel_Style_Fill::FILL_SOLID === $fill_type) {
	$color = $fill_object->getStartColor()->getRGB();
	$style['background-color'] = '#'. $color;
}

$top_border_style = $borders_object->getTop()->getBorderStyle();
$top_border_color = $borders_object->getTop()->getColor()->getRGB();
$top_border_style = $this->_trick_excel_border_style($top_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $top_border_style) {
	$style['border-top'] = '1px '. $top_border_style . ' #' . $top_border_color;
}

$left_border_style = $borders_object->getLeft()->getBorderStyle();
$left_border_color = $borders_object->getLeft()->getColor()->getRGB();
$left_border_style = $this->_trick_excel_border_style($left_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $left_border_style) {
	$style['border-left'] = '1px '. $left_border_style . ' #' . $left_border_color;
}

$bottom_border_style = $borders_object->getBottom()->getBorderStyle();
$bottom_border_color = $borders_object->getBottom()->getColor()->getRGB();
$bottom_border_style = $this->_trick_excel_border_style($bottom_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $bottom_border_style) {
	$style['border-bottom'] = '1px '. $bottom_border_style . ' #' . $bottom_border_color;
}

$right_border_style = $borders_object->getRight()->getBorderStyle();
$right_border_color = $borders_object->getRight()->getColor()->getRGB();
$right_border_style = $this->_trick_excel_border_style($right_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $right_border_style) {
	$style['border-right'] = '1px '. $right_border_style . ' #' . $right_border_color;
}

$font_size = $font_object->getSize();
if (isset($font_size) && $font_size > 11) {
	$style['font-size'] = $font_size . 'px';
}
$font_color = $font_object->getColor()->getRGB();
if (isset($font_color) && $font_color != '000000') {
	$style['color'] = '#' . $font_color;
}

$font_bold = $font_object->getBold();
if ($font_bold) {
	$style['font-weight'] = 'bold';
}
$font_italic = $font_object->getItalic();
if ($font_italic) {
	$style['font-style'] = "italic";
}
$font_underline = $font_object->getUnderline();
if ($font_underline && $font_underline != PHPExcel_Style_Font::UNDERLINE_NONE) {
	$style['text-decoration'] = "underline";			
}
$font_strikethrough = $font_object->getStrikethrough();
if ($font_strikethrough) {
	$style['text-decoration'] = "line-through";
}

$horizontal = $alignment_object->getHorizontal();
if ($horizontal != 'general') {
	$style['text-align'] = $horizontal;
}

$vertical = $alignment_object->getVertical();
if ($vertical != 'bottom') {
	$style['vertical-align'] = $vertical;
}
获取数据
  • 核心方法:$cell_obj->getCalculatedValue();
  • 注意防止注入
代码语言:txt
AI代码解释
复制
$cell_obj->getCalculatedValue();//会处理公式和富文本的值 string
$cell_obj->getValue();//不处理公式和富文本的值,存在多种类型
处理超链接

核心方法:$cell_obj->getHyperlink()->getUrl();

代码语言:txt
AI代码解释
复制
$value = $cell_obj->getCalculatedValue();
$url = $cell_obj->getHyperlink()->getUrl();
$link = '<a href="'.$url.'" target="_blank">' . $value . '</a>';
处理公式
  • $cell_obj->getValue();
  • 需要先判断是否是公式值
  • 返回格式string,ie A1:E1
代码语言:txt
AI代码解释
复制
if (!$cell_obj->isFormula()) {
	return null;
}
$value = $cell_obj->getValue();//A1:E1
preg_match('/([a-zA-Z]+)\(([a-zA-Z]+)(\d+)\:([a-zA-Z]+)(\d+)\)/', $value, $ranges); // 获得ranges范围
if (empty($ranges[1])) {
	return null;
}
合并单元格
  • $merges = $sheet_obj->getMergeCells();
  • 返回的是merge数据数组
代码语言:txt
AI代码解释
复制
$merges = $sheet_obj->getMergeCells();

if (empty($merges)) {
	return null;
}

$merge_info = [];
foreach ($merges as $k => $merge) { //A1:E1
	preg_match('/([a-zA-Z]+)(\d+)\:([a-zA-Z]+)(\d+)/i', $merge, $ranges); //获得range范围 
	//todo something
}
列宽和行高
代码语言:txt
AI代码解释
复制
//行高
$row_iteratior = $sheet_obj->getRowIterator();
$row_hights = [];//实际行高值

$i= 0;
foreach ($row_iteratior as $k => $row) {
	$row_height = (int)($sheet_obj->getRowDimension($k)->getRowHeight());

	$row_hights[$i] = $row_height;
	$i++;
}
//列宽
$col_iteratior = $sheet_obj->getColumnIterator();
$col_widths = [];//实际列宽值

$i= 0;
foreach ($col_iteratior as $k => $col) {
	$col_width = (int)($sheet_obj->getColumnDimension($k)->getWidth())*7;
	$col_widths[$i] = $col_width;
	$i++;
}
表格冻结

$freeze = $sheet_obj->getFreezePane(); // 返回 ie: A2

其他问题

空的sheeft的处理
  • 有样式,无数据
  • 默认边框和空白边框的处理
横坐标处理

Excel的横坐标为A、B....、AA、AB类型,需要转化坐标。

代码语言:txt
AI代码解释
复制
private function _get_sheet_col_key($label) {

	$col_key_map = [];
	$abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	for ($i=0; $i < 600; $i++) {
		$a = (int)($i / 26);
		$b = $i % 26;
		$column_label = '';
		if ($a == 0) {
			$column_label = $column_label . substr($abc, $b, 1);
		} else {
			$a = $a -1;
			$column_label = substr($abc, $a, 1) . substr($abc, $b, 1); 
		}
		$col_key_map[$column_label] = $i; 
	}
	return $col_key_map[$label];
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用PHP导出数据到Excel
PHP操作Excel主要有两个第三方库,一个是PHPExcel,另外一个是PhpSpreadsheet。其中PhpSpreadsheet是PHPExcel的升级版本。
gglinux
2019/04/08
2.7K0
超超长篇 - 手把手带你用python玩转Excel
gitee:https://gitee.com/xiaozai-van-liu/mwj_utils
梦无矶小仔
2024/06/18
1K0
超超长篇 - 手把手带你用python玩转Excel
vue2+luckyexcel+avue2解析在线网页数据
npm install --save exceljs file-saver luckyexcel xlsx
爱学习的前端歌谣
2024/04/03
3381
vue2+luckyexcel+avue2解析在线网页数据
php导出excel表格_phpspreadsheet导出
单个sheet页Excel2003版最大行数是65536行。Excel2007开始的版本最大行数是1048576行。Excel2003的最大列数是256列,2007以上版本是16384列。
全栈程序员站长
2022/09/30
24.5K1
php导出excel表格_phpspreadsheet导出
使用python写入excel
安装 pip install xlwt 快速开始 import xlwt # 创建一个workbook 设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 创建一个worksheet worksheet = workbook.add_sheet('My Worksheet') # 写入excel # 参数对应 行, 列, 值 worksheet.write(1,0, label = 'this is test') # 保存 workbook.save(
步履不停凡
2021/07/29
1.4K0
PHP与EXCEL PHPExcel
PHPExcel 它是用来操作Office Excel 文档PHP图书馆,它是基于微软的OpenXML标准PHP语言。能够使用它来读、写不同格电子表的类型格,例如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
全栈程序员站长
2022/07/06
1.5K0
python3 openpyxl操作excel
在日常工作中,避免不了需要操作excel文件的情况,如果还带有需要对excel的内容进行格式设定、合并单元格等需求,那么可以使用openxl来解决处理。
Devops海洋的渔夫
2019/10/10
2.8K0
python3 openpyxl操作excel
Python数据处理之导入导出excel数据
、Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况。这里做一个Python处理Excel数据的总结,基本受用大部分情况。相信以后用Python处理Excel数据不再是难事儿!
AntDream
2019/08/15
18.3K0
【好消息】Python和Excel终于可以互通了!!
今天小编为大家分享一篇使用python将大量数据导出到Excel中的技巧心得,可以让Python和Excel的数据实现互通!具有很好的参考价值,希望对大家有所帮助(建议在电脑端阅读,代码案例较多)。一起跟随小编过来看看吧!
1480
2020/05/01
1.3K0
使用Python Xlsxwriter创建Excel电子表格(第3部分:格式,迷你图与图表)
在上次的基础上,我们将使用Python xlsxwriter库通过添加格式、迷你图和图表来美化我们枯燥的Excel电子表格。如果你需要从头开始,请参阅:
fanjy
2021/12/06
3.1K0
使用Python Xlsxwriter创建Excel电子表格(第3部分:格式,迷你图与图表)
[306]python操作excel表格(xlrd/xlwt)
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel.
周小董
2022/04/12
2.6K0
[306]python操作excel表格(xlrd/xlwt)
PHPExcel使用笔记
http://stackoverflow.com/questions/6054444/how-to-set-auto-height-in-phpexcel
Enjoy233
2019/03/05
1.5K0
python excel处理
def csv_to_xlsx(input,output): with open(input, encoding='ANSI') as f: read = csv.reader(f) workbook = Workbook() sheet = workbook.active l = 1 ds=datesecon() com = re.compile("(\n|\t){1,}") border = Border(left=Side(style='thin', color='FF000000'), right=Side(style='thin', color='FF000000'), top=Side(style='thin', color='FF000000'), bottom=Side(style='thin', color='FF000000'), diagonal=Side(style='thin', color='FF000000'), diagonal_direction=0, outline=Side(style='thin', color='FF000000'), vertical=Side(style='thin', color='FF000000'), horizontal=Side(style='thin', color='FF000000')) for line in read: st = "@@@".join(line) ss = re.sub(com, "\n", st) line = ss.split("@@@") r = 1 if l>1 and (string_toDatetime(line[4]) < ds[0] or string_toDatetime(line[4]) > ds[1]): r = r + 1 continue for i in line: sheet.cell(row=l, column=r).border = border sheet.cell(row=l, column=r).value = i sheet.cell(row=l, column=r).alignment = Alignment(wrapText=True) if(l==1): fill = PatternFill("solid", fgColor="FFFF00") sheet.cell(row=l, column=r).fill = fill r = r + 1 l = l + 1 col_width = [] i = 0 for col in sheet.columns: for j in range(len(col)): if j == 0: col_width.append(len(str(col[j].value))) else: if col_width[i] < len(str(col[j].value)): col_width[i] = len(str(col[j].value)) i = i + 1 for i in range(len(col_width)): col_letter = get_column_letter(i+1) if col_width[i] > 100: sheet.column_dimensions[col_letter].width = 100 elif col_width[i]: if col_width[i]<=6:col_width[i]=10 sheet.column_dimensions[col_letter].width = col_width[i] workbook.save(output) # 保存Excel
用户5760343
2022/05/13
2790
DataFrame表样式设置(一)
我们知道Excel功能很强大,Python与Excel交互也有很多现成的模块可以用,主要有xlrd、xlwt、openpyxl、xlsxwriter这四种可以用,这些模块可以很好地通过Python实现Excel的功能,但是这些模块有一个不太方便的地方就是针对每一个单元格的行列位置去操作的,每次使用都很麻烦,不像DataFrame那样可以针对行列去进行操作。DataFrame虽然操作便利,但是DataFrame又有个不如意的地方就是不能针对表去进行设置格式(字体颜色、大小之类的),所以有的时候为了可以设置表的格式还是需要用那几个比较麻烦的 Excel模块。直到我遇到了StyleFrame模块,这个模块是把Pandas和openpyxl进行了结合,让你既可以享受DataFrame的操作便利,又可以轻松利用openpyxl进行表格样式设置。
张俊红
2019/05/05
5.4K0
DataFrame表样式设置(一)
python3.5操作office Ex
在load_workbook中可使用: 在读取单元格时,guess_types将启用或禁用(默认)类型推断。
py3study
2020/01/08
8450
【Django | 开发】面试招聘网站(增加csv,excel导出&企业域账号集成&日志管理功能)
在应用interview创建managment文件以及该目录下command文件,创建import_candidate.py进行脚本操作、
计算机魔术师
2022/08/19
3830
【Django | 开发】面试招聘网站(增加csv,excel导出&企业域账号集成&日志管理功能)
Thinkphp使用PhpSpreadsheet导入&导出Excel(适用各种Excel操作场景)
最近公司要做报表功能,各种财务报表、工资报表、考勤报表等,复杂程度让人头大,于是特地封装适用各大场景的导入&导出操作,希望各界大神支出不足之处,以便小弟继续完善。
程序猿的栖息地
2022/04/29
3.7K0
python自动化高效办公第二期,带你项目实战【一】{excel数据处理、批量化生成word模板、pdf和ppt等自动化操作}
我们在读取文件的时候,excel的列是字母我们不容易直观看出来是第几列,下面对excel进行设置。
汀丶人工智能
2022/12/21
3K0
python自动化高效办公第二期,带你项目实战【一】{excel数据处理、批量化生成word模板、pdf和ppt等自动化操作}
Excel办公自动化
请注意,本文编写于 986 天前,最后修改于 986 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
4150
Excel办公自动化
openpyxl | Python操作Excel利器
一个excel文档就是一个工作簿 Workbook,每个工作簿对应可以有很多个表格sheet,每个表格页,由单元格组成。openpyxl通过操作这三个层级,完成对excel的操作。
测试邦
2019/08/23
2.1K0
openpyxl | Python操作Excel利器
推荐阅读
相关推荐
使用PHP导出数据到Excel
更多 >
LV.1
腾讯应用开发
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档