中企动力 > 商学院 > 读取excel
  • ?

    利用PHPExcel读取Excel的数据和导出数据到Excel

    雾水

    展开

    PHPExcel是一个PHP类库,用来帮助我们简单、高效实现从Excel读取Excel的数据和导出数据到Excel。也是我们日常开发中,经常会遇到的使用场景。比如有个客户信息表,要批量导出发给同事,我们就可以用PHPExcel来快速实现。同样,如果我们要利用短信群发接口去群发信息,PHPExcel可以快速导入客户信息,避免人工录入信息的麻烦。

    PHPExcel使用教程:

    首先下载PHPExcel

    到https://github/PHPOffice/PHPExcel下载PHPExcel,如果不懂得使用git,可以到这https://codeload.github/PHPOffice/PHPExcel/zip/1.8下载压缩包,懂得的自行用git下载。

    下载好文件,解压可以得到如下文件:

    PHPExcel

    好了,现在我们就可以用PHPExcel愉快的读取和制作表格了!

    PHPExcelDEMO1:利用PHPExcel读取excel信息:

    我们在根目录创建一个名为read.php的文件来读取文档,创建一个test.xlsx的文件,里面写的信息如下:

    然后在read.php写以下代码:

    $inputFileName=‘./test.xls’;date_default_timezone_set(‘PRC’);//读取excel文件try{$inputFileType=PHPExcel_IOFactory::identify($inputFileName);$objReader=PHPExcel_IOFactory::createReader($inputFileType);$objPHPExcel=$objReader->load($inputFileName);}catch(Exception$e){die(‘加载文件发生错误:”‘.pathinfo($inputFileName,PATHINFO_BASENAME).'”:‘.$e->getMessage);//确定要读取的sheet,什么是sheet,看excel的右下角,真的不懂去百度吧$sheet=$objPHPExcel->getSheet(0);$highestRow=$sheet->getHighestRow;$highestColumn=$sheet->getHighestColumn;//获取一行的数据for($row=1;$row//Readarowofdataintoanarray$rowData=$sheet->rangeToArray(‘A’.$row.‘:’.$highestColumn.$row,NULL,TRUE,FALSE);//这里得到的rowData都是一行的数据,得到数据后自行处理,我们这里只打出来看看效果var_dump($rowData);echo“”;

    得到的数据:

    PHPexcel读取文件

    PHPExcelDEMO2:利用PHPExcel导出信息到excel:

    getProperties->setCreator("作者简庆旺")->setLastModifiedBy("最后更改者")->setTitle("文档标题")->setSubject("文档主题")->setDescription("文档的描述信息")->setKeywords("设置文档关键词")->setCategory("设置文档的分类");//根据excel坐标,添加数据$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1','你好')->setCellValue('B2','世界')->setCellValue('C1','你好')->setCellValue('D2','世界');//混杂各种符号,编码为UTF-8$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A4','Miscellaneousglyphs')->setCellValue('A5','éàèùêüü');$objPHPExcel->getActiveSheet->setCellValue('A8',"你好世界");$objPHPExcel->getActiveSheet->getRowDimension(8)->setRowHeight(-1);$objPHPExcel->getActiveSheet->getStyle('A8')->getAlignment->setWrapText(true);$value="-ValueA\n-ValueB\n-ValueC";$objPHPExcel->getActiveSheet->setCellValue('A10',$value);$objPHPExcel->getActiveSheet->getRowDimension(10)->setRowHeight(-1);$objPHPExcel->getActiveSheet->getStyle('A10')->getAlignment->setWrapText(true);$objPHPExcel->getActiveSheet->getStyle('A10')->setQuotePrefix(true);//重命名工作sheet$objPHPExcel->getActiveSheet->setTitle('第一个sheet');//设置第一个sheet为工作的sheet$objPHPExcel->setActiveSheetIndex(0);//保存Excel2007格式文件,保存路径为当前路径,名字为export.xlsx$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');$objWriter->save('export.xlsx');//保存Excel95格式文件,,保存路径为当前路径,$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');$objWriter->save('export.xls');

    好了,执行后我们可以得到export.xls和export.xlsx,如果使用过程遇到问题,可以联系本博客答疑。

  • ?

    phpexcel导入excel处理大数据

    新蕾

    展开

    phpexcel导入excel处理大数据

    先下载对应phpExcel 的包就行了https://github/PHPOffice/PHPExcel

    下载完成 把那个Classes 这个文件夹里面的 文件跟文件夹拿出来就好了。

    直接写到PHPExcel 这个文件里面的。调用很简单。引入phpExcel 这个类传递对应的excel 文件的路径就好了

    现在上传到指定的目录,然后加载上传的excel文件读取这里读取是的时候不转换数组了。注意:是Sheet可以多个读取,php上传值要设置大,上传超时要设置长。

  • ?

    黑马程序员:程序员必看:如何用Python实现Excel读写与处理!

    Peren

    展开

    本篇文章讲的是Excel文件的读写和处理。Excel除了是普通生活中应用广泛的数据处理软件和数据保存格式外,在商业分析中也占有非常大的重量,熟练使用Excel软件是数据分析师很关键的技能点,但这篇笔记不是讲各类Excel函数和快捷键,而是讲Python对Excel的 .xls 和 .xlsx 格式数据的读写和处理。

    目录

    Excel文件简介Excel文件的读取Excel文件的写入pandas库读写Excel筛选与统计量计算

    Excel文件简介

    Excel其实相信大家都不陌生,一个 .xls(Excel 2013后默认格式为 .xlsx )文件是一个工作簿(workbook),包含多个表(worksheet),每个表内数据按照行列进行组织,书中第三章的用词中,“文件”和“工作簿”表示同一个对象。拿本篇笔记用到的示例文件

    sales_2015.xlsx 为例:

    本篇笔记需要用到两个库: xlrd 和 xlwt,这两个库不是内置模块,但安装了Anaconda集成环境的话,这两个库被包含了,可以通过 import xlrd 和 import xlwt 进行测试,如果提示未安装,可以通过命令行下用pip安装,本处不展开。xlrd用来读取Excel文件,xlwt用于构建Workbook对象进行Excel文件的创建和写入数据。这两个库不能对Excel文件进行直接更改,因此思路是

    复制一份数据到内存进行分析计算,再写入新Excel文件中

    。需要直接性地修改可以考虑VBA吧,VBA(Visual Basic for Applications)是目前 Office 套件支持的基于 Visual Basic 的宏语言,目前一般在Excel或PPT内进行编程实现高级效果(如Excel数据的批量修改)一般都用VBA,当然以后Office要内置Python了,现在学好Python以后就能很容易理解和定制化Excel的宏了。

    Excel文件的读取

    通过xlrd库的open_workbook()对Excel数据进行读入。

    #lrd读取并输出基本信息# -*- coding: utf-8 -*-def readExcel(fname):from xlrd import open_workbook workbook = open_workbook(fname) print('工作表数量:', workbook.nsheets) for worksheet in workbook.sheets(): #循环输出表名 print("Worksheet name:", worksheet.name, "\tRows:",worksheet.nrows, "\tColumns:", worksheet.ncols)readExcel('sales_2015.xlsx')

    输出:

    工作表数量: 3Worksheet name: january_2015 Rows: 7 Columns: 5Worksheet name: february_2015 Rows: 7 Columns: 5Worksheet name: march_2015 Rows: 7 Columns: 5

    Excel文件的写入

    写入要用到 xlwt 库,如下面的代码,创建一个Workbook对象后,通过worksheet.write()写入数据。因为使用with进行处理,所以不需要写close()显式关闭打开的文件。

    #读取一些Excel并写入新表def parsingExcToWrite(in_file,out_file):from xlrd import open_workbook from xlwt import Workbook #导入一个 Workbook对象 output_workbook = Workbook() output_worksheet = output_workbook.add_sheet('jan_2015_output') #加一个新工作表到工作簿对象里 with open_workbook(in_file) as workbook: worksheet = workbook.sheet_by_name('january_2015') #引用上面创建的工作表 print('type(worksheet):',type(worksheet)) print('write()传入参数类型:',type(worksheet.cell_value)) for row_index in range(worksheet.nrows): for column_index in range(worksheet.ncols): #枚举写入数据 output_worksheet.write(row_index, column_index, worksheet.cell_value(row_index, column_index)) output_workbook.save(out_file)in_f='sales_2015.xlsx'out_f='save_sales_2015.xlsx'parsingExcToWrite(in_f,out_f) #调用

    输出:

    type(worksheet): write()传入参数类型:

    生成的文件效果如下:

    上面写成的函数parsingExcToWrite()就是是一个可以使用在读取、处理、写入的框架,如前所说,这两个库不能直接对Excel进行修改,那么读取相应的数据处理后再写入新表就是很好的解决方案。 下面的处理代码如果需要保存处理后的数据就可以基于这段代码进行扩展。

    pandas库读写Excel下面看看用pandas进行Excel读取的操作, 读只需要一句话(引入库的不算在内),pd.read_excel(in_fname),和前一篇笔记读取csv的格式一样,都是生成dataframe数据格式。写入Excel通过pd.ExcelWriter()构建一个Excel写入对象,再对这个对象操作,最后调用 .save()进行写入到硬盘。

    import pandas as pd in_f='sales_2015.xlsx'out_f='save_sales_2015_1.xlsx'data_frame = pd.read_excel(in_f, 'january_2015', index_col=None) #对 data_frame进行一些处理dframe_condition = data_frame[:] writer = pd.ExcelWriter(out_f)dframe_condition.to_excel(writer, sheet_name='sheet_name',index=False) writer.save()print('done')#输出: done

    筛选与统计量计算因为pandas可以简化一些操作,并且多练pandas是很有意义很重要的,所以下面筛选和统计量的计算都是基于pandas的处理。

    有些时候,我们并不需要 Excel 文件中的所有行,特别是数据量很大但是我们只关心满足一定条件的数据。例如,可能只需要包含一个特定的词数值的那些行,或者只需要那些与一个具体日期相关联的行数据。这时候我们就需要进行筛选,去掉不需要的行,只保留需要的行。下面的代码演示了筛选 Sale Amount 大于 $567.00 的行。我们可以通过改变代码data_frame_value_meets_condition = data_frame[data_frame['Sale Amount'].astype(float) > 567.0] 来筛选行中的值满足某个条件的数据。#import pandas as pd #上面引入了这里就不需要重复引入,如果是独立的文件需要写上这句def valConditionExc(in_file,out_file):data_frame = pd.read_excel(in_file, 'january_2015', index_col=None) data_frame_value_meets_condition = data_frame[data_frame['Sale Amount'].astype(float) > 567.0] writer = pd.ExcelWriter(out_file) data_frame_value_meets_condition.to_excel(writer, sheet_name='jan_15_output',index=False) writer.save()#行中的值匹配于特定模式def valMatchPattern(in_file,out_file): data_frame = pd.read_excel(in_file, 'january_2015', index_col=None) df_value_matp = data_frame[data_frame['Customer Name'].str.startswith("J")] writer = pd.ExcelWriter(out_file) df_value_matp.to_excel(writer, sheet_name='jan_15_output',index=False) writer.save() print(df_value_matp)#选择满足一定条件的特定列数据def selectColByIndex(in_file,out_file): data_frame = pd.read_excel(input_file, 'january_2015', index_col=None) df_col_by_index = data_frame.iloc[:, [1, 4]] writer = pd.ExcelWriter(output_file) df_col_by_index.to_excel(writer, sheet_name='jan_15_output',index=False) writer.save()in_f='sales_2015.xlsx'valConditionExc(in_f,'save_sales_2015_2.xlsx')valMatchPattern(in_f,'save_sales_2015_3.xlsx')

    输出:

    Customer ID Customer Name Invoice Number Sale Amount Purchase Date0 1234 John Smith 100-0002 123 2015-01-014 5678 Jenny Walters 100-0006 345 2015-01-24

    使用 pandas 基于列标题选取特定列,一种方式是在数据框名称后面的方括号中将列名以字符串方式列出。另外一种方式是使用 loc 函数。如果使用 loc 函数,那么需要在列标题列表前面加上一个冒号和一个逗号,表示你想为这些特定的列保留所有行。例如下面的代码:

    #import pandas as pd def selectAllColByName(in_file,out_file):data_frame = pd.read_excel(in_file, 'january_2015', index_col=None) selected_columns = data_frame.loc[:, ['Customer ID', 'Purchase Date']] #根据列标题选取特定列 writer = pd.ExcelWriter(out_file) selected_columns.to_excel(writer, sheet_name='jan_13_output',index=False) print(selected_columns) writer.save()in_f='sales_2015.xlsx'selectAllColByName(in_f,'save_sales_2015_4.xlsx')

    输出:

    Customer ID Purchase Date0 1234 2015-01-011 2345 2015-01-062 3456 2015-01-113 4567 2015-01-184 5678 2015-01-245 6789 2015-01-31

    大家可以根据代码的效果区分上上部分代码的data_frame.iloc[:, [1, 4]] 和上面的data_frame.loc[:,

    ['Customer ID', 'Purchase Date']]

    .loc for label based indexing.iloc for positional indexing

    数据装入pandas的dataframe之后,除了进行筛选,计算一些统计量也是数据分析很重要的工作,描述性统计给我们提供了很多描述数据的指标,下面的代码为工作表的销售数据计算总数和均值。

    #import pandas as pd def getSumAndAverage(in_f):all_worksheets = pd.read_excel(in_f,sheetname=None, index_col=None) workbook_total_sales = [] workbook_number_of_sales = [] workbook_mean_sales = [] for worksheet_name, w_data in all_worksheets.items(): total_sales = pd.DataFrame([float(str(value).strip('$').replace(',','')) for value in w_data.loc[:, 'Sale Amount']]).sum() #算一个表的总体销售额 number_of_sales = len(w_data.loc[:, 'Sale Amount']) workbook_total_sales.append(total_sales) #装入一个列表 workbook_number_of_sales.append(number_of_sales) mean_sales=total_sales/number_of_sales #均值 workbook_mean_sales.append(mean_sales) print(worksheet_name,'\t total:',total_sales[0],'\t num:',number_of_sales,'\t mean:',mean_sales[0])in_f='sales_2015.xlsx'getSumAndAverage(in_f)

    输出:

    january_2015 total: 3201.0 num: 6 mean: 533.5february_2015 total: 55007.0 num: 6 mean: 9167.83333333march_2015 total: 246045.0 num: 6 mean: 41007.5

  • ?

    使用Python处理Excel实现读写、合并、样式及图表的功能

    忆彤

    展开

    转载自百家号作者:淘特

    Python语言最近非常火,其丰富的模块支持使得开发软件的效率大大提高。本文我们就学习一下使用openpyxl进行Excel文档相关处理的功能。

    Excel文档

    首先,我们来看一些基本定义:Excel电子表格文档称为工作簿。单个工作簿保存在扩展名为.xlsx的文件中。每个工作簿可以包含多个工作表(也称为工作表)。用户当前正在查看的工作表(或在关闭Excel之前最后查看的工作表)称为活动工作表。

    每个工作表都有列(由A开头的字母寻址)和行(从1开始的数字寻址)。特定列和行的框称为单元格。每个单元格可以包含数字或文本值。具有数据的单元格网格组成一张纸。

    安装openpyxl模块

    Python不附带OpenPyXL,因此您必须安装它。模块的名称是openpyxl。要测试是否正确安装,请在交互式shell中输入以下内容:

    >>> import openpyxl

    如果模块已正确安装,则不应生成错误消息。请记住openpyxl在本章中运行交互式shell示例之前导入模块,否则您将收到NameError: name 'openpyxl' is not defined错误。

    操作步骤

    作为快速理解,这里是从电子表格文件中读取单元格所涉及的所有函数,方法和数据类型的概述:

    1. 导入openpyxl模块。

    2. 调用openpyxl.load_workbook()功能。

    3. 获取一个Workbook对象。

    4. 读取active成员变量或调用get_sheet_by_name()工作簿方法。

    5. 获取一个Worksheet对象。

    6. 使用索引或通过row和column关键字参数调取sheet 中的cell()表方法。

    7. 获取一个Cell对象。

    8. 读取Cell对象的value属性。

    读Excel文档

    本章中的示例将使用存储在根文件夹中的名为test.xlsx的电子表格。您可以自己创建电子表格。图12-1显示了Excel自动为新工作簿提供的名为Sheet1,Sheet2和Sheet3的三个默认工作表的选项卡。(创建的默认工作表数量可能因操作系统和电子表格程序而异。)

    图12-1。excel工作表的选项卡位于Excel

    现在我们有了示例电子表格,让我们看看我们如何使用openpyxl模块来操作它。

    使用OpenPyXL打开Excel文档

    导入openpyxl模块后,您将能够使用该openpyxl.load_workbook()功能。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> type(wb)

    'openpyxl.workbook.workbook.workbook'>

    openpyxl.load_workbook()函数返回workbook数据类型的对象。

    test.xlsx和程序在一个目录中,如果在其它目录里可以通过导入os模块,使用os.getcwd()获取当前目录,或通过os.chdir()更换目录。

    从工作簿中获取表格

    get_sheet_names()方法获取工作簿中所有工作表名称的列表。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> wb.get_sheet_names()

    ['Sheet1', 'Sheet2', 'Sheet3']

    >>> sheet = wb.get_sheet_by_name('Sheet3')

    >>> sheet

    >>> type(sheet)

    >>> sheet.title

    'Sheet3'

    >>> anotherSheet = wb.active

    >>> anotherSheet

    上面的代码 一目了然。得到Worksheet对象后可以通过title属性获取它的名称。

    从Sheet中获取cell

    获得Worksheet对象后,可以按名称访问Cell对象。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> sheet = wb.get_sheet_by_name('Sheet1')

    >>> sheet['A1']

    >>> sheet['A1'].value

    datetime.datetime(2015, 4, 5, 13, 34, 2)

    >>> c = sheet['B1']

    >>> c.value

    'Apples'

    >>> 'Row ' + str(c.row) + ', Column ' + c.column + ' is ' + c.value

    'Row 1, Column B is Apples'

    >>> 'Cell ' + c.coordinate + ' is ' + c.value

    'Cell B1 is Apples'

    >>> sheet['C1'].value

    73

    Cell对象具有一个value属性,该属性包含存储在该单元格中的值。Cell对象还具有row,column和coordinate提供单元格位置信息的属性。

    在这里,访问单元格B1 value的Cell对象属性为我们提供了字符串'Apples'。该row属性为我们提供了整数1,column属性给出了我们'B',coordinate属性给了我们'B1'。

    OpenPyXL将自动解释A列中的日期,并将它们作为datetime值而不是字符串返回。逐个指定列可能很难编程,特别是因为在Z列之后,列开始使用两个字母:AA,AB,AC等。作为替代方案,您还可以使用工作表的cell()方法获取单元格,并为其row和column关键字参数传递整数。第一行或列整数1不是0。输入以下内容继续交互式shell示例:

    >>> sheet.cell(row=1, column=2)

    >>> sheet.cell(row=1, column=2).value

    'Apples'

    >>> for i in range(1, 8, 2):

    print(i, sheet.cell(row=i, column=2).value)

    1 Apples

    3 Pears

    5 Apples

    7 Strawberries

    正如您所看到的,使用工作表的cell()方法并传递它row=1并column=2获取Cell单元格的对象B1,就像指定sheet['B1']did一样。然后,使用该cell()方法及其关键字参数,您可以编写一个for循环来打印一系列单元格的值。

    假设您想要下到B列并在每个具有奇数行号的单元格中打印该值。通过传递2的range()功能的“台阶”的参数,你可以从cell中每隔一行(在这种情况下,所有的奇数行)读取cell中的值。

    您可以使用Worksheet对象max_row和max_column成员变量确定工作表的大小。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> sheet = wb.get_sheet_by_name('Sheet1')

    >>> sheet.max_row

    7

    >>> sheet.max_column

    3

    请注意,该max_column方法返回一个整数而不是Excel中显示的字母。

    从表格中获取行和列

    您可以分割Worksheet对象以获取Cell电子表格的行,列或矩形区域中的所有对象。然后,您可以遍历切片中的所有单元格。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> sheet = wb.get_sheet_by_name('Sheet1')

    >>> tuple(sheet['A1':'C3'])

    ((, , ), (,

    , ), (, ,

    ))

    >>> for rowOfCellObjects in sheet['A1':'C3']:

    for cellObj in rowOfCellObjects:

    print(cellObj.coordinate, cellObj.value)

    print('--- END OF ROW ---')

    A1 2015-04-05 13:34:02

    B1 Apples

    C1 73

    --- END OF ROW ---

    A2 2015-04-05 03:41:23

    B2 Cherries

    C2 85

    --- END OF ROW ---

    A3 2015-04-06 12:46:51

    B3 Pears

    C3 14

    --- END OF ROW ---

    在这里,我们截取从A1到C3这一区域的cell。为了帮助我们测试截取的区域是否如设计一样,我们可以使用tuple()函数来展示其中的Cell对象。

    要打印区域中每个单元格的值,我们使用两个for循环。中代码用于遍历行。然后,对于每一行,嵌套for循环遍历该行中的每个列。

    要访问特定行或列中单元格的值,还可以使用Worksheet对象rows和columns属性。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> sheet = wb.active

    >>> sheet.columns[1]

    (, , , ,

    , , )

    >>> for cellObj in sheet.columns[1]:

    print(cellObj.value)

    Apples

    Cherries

    Pears

    Oranges

    Apples

    Bananas

    Strawberries

    使用对象Worksheet上的rows属性将为您提供元组数组。这些内部元组中的每一个对象都代表一行,并包含该行中的Cell对象。columns属性还为您提供元组数组,每个内部元组包含Cell特定对象列。例如.xlsx,因为有7行和3列,rows给我们一个7元组的数组(每个包含3个Cell对象),columns给我们一个3元组的数组(每个元组包含7个Cell对象)。

    要访问一个特定的元组,您可以通过更大元组中的索引来引用它。例如,要获取表示列B的元组,请使用sheet.columns[1]。要获取包含CellA列中对象的元组,您可以使用sheet.columns[0]。一旦你有一个表示一行或一列的元组,你就可以遍历它的Cell对象并打印它们的值。

    编写Excel文档

    OpenPyXL还提供了编写数据的方法,这意味着您的程序可以创建和编辑电子表格文件。使用Python,创建包含数千行数据的电子表格非常简单。

    创建和保存Excel文档

    调用openpyxl.Workbook()函数以创建一个新的空白Workbook对象。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.Workbook()

    >>> wb.get_sheet_names()

    ['Sheet']

    >>> sheet = wb.active

    >>> sheet.title

    'Sheet'

    >>> sheet.title = 'Spam Bacon Eggs Sheet'

    >>> wb.get_sheet_names()

    ['Spam Bacon Eggs Sheet']

    工作簿将从名为Sheet的单个工作表开始。您可以通过在其title属性中存储新字符串来更改工作表的名称。

    每次修改Workbook对象或其工作表和单元格时,在调用save()工作簿方法之前,不会保存电子表格文件。在交互式shell中输入以下内容(当前工作目录中包含test.xlsx):

    >>> import openpyxl

    >>> wb = openpyxl.load_workbook('test.xlsx')

    >>> sheet = wb.active

    >>> sheet.title ='垃圾邮件垃圾邮件'

    >>> wb.save('test_copy. XLSX')

    在这里,我们更改工作表的名称。为了保存我们的更改,我们将文件名作为字符串传递给save()方法。传递与原始文件名不同的文件名,例如'test_copy.xlsx',将更改保存到电子表格的副本。

    无论何时编辑从文件加载的电子表格,都应始终将新编辑的电子表格保存为与原始文件不同的文件名。这样,如果代码中的错误导致新的,已保存的文件包含不正确或损坏的数据,您仍然可以使用原始电子表格文件。

    创建和删除表格

    可以使用create_sheet()和remove_sheet()方法在工作簿中添加和删除工作表。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> wb = openpyxl.Workbook()

    >>> wb.get_sheet_names()

    ['Sheet']

    >>> wb.create_sheet()

    >>> wb.get_sheet_names()

    ['Sheet', 'Sheet1']

    >>> wb.create_sheet(index=0, title='First Sheet')

    >>> wb.get_sheet_names()

    ['First Sheet', 'Sheet', 'Sheet1']

    >>> wb.create_sheet(index=2, title='Middle Sheet')

    >>> wb.get_sheet_names()

    ['First Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']

    该create_sheet()方法返回一个Worksheet名为的新对象SheetX,默认情况下,该对象设置为工作簿中的最后一个工作表。(可选)可以使用index和title关键字参数指定新工作表的索引和名称。

    输入以下内容继续上一个示例:

    >>> wb.get_sheet_names()

    ['First Sheet','Sheet','Middle Sheet','Sheet1']

    >>> wb.remove_sheet(wb.get_sheet_by_name('Middle Sheet'))

    >>> wb.remove_sheet(wb.get_sheet_by_name('Sheet1'))

    >>> wb.get_sheet_names()

    ['First Sheet','Sheet' ]

    该remove_sheet()方法将Worksheet对象而不是工作表名称的字符串作为其参数。如果您只知道要删除的工作表的名称,请调用get_sheet_by_name()并将其返回值传递给remove_sheet()。

    save()在将工作表添加到工作簿或从工作簿中删除工作表之后,请记住调用该方法来保存更改。

    将值写入单元格

    将值写入单元格就像将值写入字典中的键一样。在交互式shell中输入:

    >>> import openpyxl

    >>> wb = openpyxl.Workbook()

    >>> sheet = wb.get_sheet_by_name('Sheet')

    >>> sheet['A1'] = 'Hello world!'

    >>> sheet['A1'].value

    'Hello world!'

    如果将单元格的坐标作为字符串,则可以像Worksheet对象上的字典键一样使用它来指定要写入的单元格。

    类似程序的想法

    由于许多办公室工作人员一直使用Excel电子表格,因此可以自动编辑和编写Excel文件的程序非常有用。这样的程序可以执行以下操作:

    从一个电子表格中读取数据并将其写入其他电子表格的部分内容。从网站,文本文件或剪贴板中读取数据并将其写入电子表格。自动“清理”电子表格中的数据。例如,它可以使用正则表达式来读取多种格式的电话号码,并将它们编辑为单一的标准格式。

    设置单元格的字体样式

    样式化某些单元格,行或列可以帮助您强调电子表格中的重要区域。例如,在产品电子表格中,您的程序可以将粗体文本应用于马铃薯,大蒜等。或者,您可能希望以每斤超过5元的成本对每一行进行斜体显示。手动设置大型电子表格的部分内容会很繁琐,但您的程序可以马上执行。

    要自定义单元格中的字体样式,请务必从openpyxl.styles模块中导入Font()函数。

    from openpyxl.styles import Font

    这是一个创建新工作簿并将单元格A1设置为具有24磅斜体字体的示例。在交互式shell中输入以下内容:

    >>> import openpyxl

    >>> from openpyxl.styles import Font

    >>> wb = openpyxl.Workbook()

    >>> sheet = wb.get_sheet_by_name('Sheet')

    >>> italic24Font = Font(size=24, italic=True)

    >>> sheet['A1'].font = italic24Font

    >>> sheet['A1'] = 'Hello world!'

    >>> wb.save('styled.xlsx')

    可以通过将Font对象分配给style属性来设置单元格的样式。

    在此示例中,Font(size=24, italic=True)返回Font存储在italic24Font中的对象。关键字参数Font(),size和italic,配置Font对象的属性。...

  • ?

    一行代码完成Java的Excel读写

    彤彤

    展开

    前段时间在 github 上发现了阿里的 EasyExcel 项目,觉得挺不错的,就写了一个简单的方法封装,做到只用一个函数就完成 Excel 的导入或者导。刚好前段时间更新修复了一些 BUG,就把我的这个封装分享出来,请多多指教。

    附上源码:

    https://github/HowieYuan/easyexcel-method-encapsulation

    EasyExcel

    EasyExcel 的 github 地址:

    https://github/alibaba/easyexcel

    EasyExcel 的官方介绍:

    可以看到 EasyExcel 最大的特点就是使用内存少,当然现在它的功能还比较简单,能够面对的复杂场景比较少,不过基本的读写完全可以满足。

    一. 依赖

    首先是添加该项目的依赖,目前的版本是 1.0.2。

    com.alibabaeasyexcel1.0.2

    二. 需要的类

    1. ExcelUtil

    工具类,可以直接调用该工具类的方法完成 Excel 的读或者写。

    2. ExcelListener

    监听类,可以根据需要与自己的情况,自定义处理获取到的数据,我这里只是简单地把数据添加到一个 List 里面。

    publicclassExcelListenerextendsAnalysisEventListener {//自定义用于暂时存储data。//可以通过实例获取该值private List datas = new ArrayList<>();/** * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据 */ @Overridepublicvoidinvoke(Object object, AnalysisContext context) {//数据存储到list,供批量处理,或后续自己业务逻辑处理。 datas.add(object);//根据自己业务做处理 doSomething(object); }privatevoiddoSomething(Object object) { } @OverridepublicvoiddoAfterAllAnalysed(AnalysisContext context) {/* datas.clear(); 解析结束销毁不用的资源 */ }public List getDatas() {return datas; }publicvoidsetDatas(List datas) {this.datas = datas; }}

    3. ExcelWriterFactroy

    用于导出多个 sheet 的 Excel,通过多次调用 write 方法写入多个 sheet。

    4. ExcelException

    捕获相关 Exception。

    三. 读取 Excel

    读取 Excel 时只需要调用 ExcelUtil.readExcel() 方法:

    @RequestMapping(value = "readExcel", method = RequestMethod.POST)public Object readExcel(MultipartFile excel) {return ExcelUtil.readExcel(excel, new ImportInfo());}

    其中 excel 是 MultipartFile 类型的文件对象,而 new ImportInfo() 是该 Excel 所映射的实体对象,需要继承 BaseRowModel 类,如:

    publicclass ImportInfo extends BaseRowModel {@ExcelProperty(index = 0)privateString name;@ExcelProperty(index = 1)privateString age;@ExcelProperty(index = 2)privateString email;/* 作为 excel 的模型映射,需要 setter 方法 */publicString getName() {return name; }publicvoid setName(String name) {this.name = name; }publicString getAge() {return age; }publicvoid setAge(String age) {this.age = age; }publicString getEmail() {return email; }publicvoid setEmail(String email) {this.email = email; }}

    作为映射实体类,通过 @ExcelProperty 注解与 index 变量可以标注成员变量所映射的列,同时不可缺少 setter 方法。

    四. 导出 Excel

    1. 导出的 Excel 只拥有一个 sheet

    只需要调用 ExcelUtil.writeExcelWithSheets() 方法:

    @RequestMapping(value = "writeExcel", method = RequestMethod.GET)publicvoidwriteExcel(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName = "第一个 sheet"; ExcelUtil.writeExcel(response, list, fileName, sheetName, new ExportInfo()); }

    fileName,sheetName 分别是导出文件的文件名和 sheet 名,new ExportInfo() 为导出数据的映射实体对象,list 为导出数据。

    对于映射实体类,可以根据需要通过 @ExcelProperty 注解自定义表头,当然同样需要继承 BaseRowModel 类,如:

    publicclass ExportInfo extends BaseRowModel {@ExcelProperty(value = "姓名" ,index = 0)privateString name;@ExcelProperty(value = "年龄",index = 1)privateString age;@ExcelProperty(value = "邮箱",index = 2)privateString email;@ExcelProperty(value = "地址",index = 3)privateString address;}

    value 为列名,index 为列的序号。

    如果需要复杂一点,可以实现如下图的效果:

    对应的实体类写法如下:

    publicclass MultiLineHeadExcelModel extends BaseRowModel {@ExcelProperty(value = {"表头1","表头1","表头31"},index = 0)privateString p1;@ExcelProperty(value = {"表头1","表头1","表头32"},index = 1)privateString p2;@ExcelProperty(value = {"表头3","表头3","表头3"},index = 2)private int p3;@ExcelProperty(value = {"表头4","表头4","表头4"},index = 3)private long p4;@ExcelProperty(value = {"表头5","表头51","表头52"},index = 4)privateString p5;@ExcelProperty(value = {"表头6","表头61","表头611"},index = 5)privateString p6;@ExcelProperty(value = {"表头6","表头61","表头612"},index = 6)privateString p7;@ExcelProperty(value = {"表头6","表头62","表头621"},index = 7)privateString p8;@ExcelProperty(value = {"表头6","表头62","表头622"},index = 8)privateString p9;}

    2. 导出的 Excel 拥有多个 sheet

    调用 ExcelUtil.writeExcelWithSheets() 处理第一个 sheet,之后调用 write() 方法依次处理之后的 sheet,最后使用 finish() 方法结束。

    publicvoidwriteExcelWithSheets(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName1 = "第一个 sheet"; String sheetName2 = "第二个 sheet"; String sheetName3 = "第三个 sheet"; ExcelUtil.writeExcelWithSheets(response, list, fileName, sheetName1, new ExportInfo()) .write(list, sheetName2, new ExportInfo()) .write(list, sheetName3, new ExportInfo()) .finish();}

    write 方法的参数为当前 sheet 的 list 数据,当前 sheet 名以及对应的映射类。

    扩展阅读

    代码整洁之道|最佳实践小结

    Javascript 将 HTML 页面生成 PDF 并下载

    Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    来源:https://juejin.im/post/5ba320546fb9a05d0b14304b

    文章来源网络,版权归作者本人所有,如侵犯到原作者权益,请与我们联系删除

  • ?

    TP5下安装phpexcel读取excel文档导入到数据库

    婆娑

    展开

    最近用到kuaidi100的端口服力, 但下载到对方的快递公司代码, 全是word文档的, 需要存储到数据里, 有好几百条, 一条条添加太耗时了, 于是决定把word文档拷贝到excel里,然后直接导入到数据库中, 用到了phpexcel类[具体什么东东, 不知道的coder去百度科普一下], 为了方便有需要的coder使用, 这里粘贴下使用方法

    1. 下载并安装phpexcel

    composer require phpoffice/phpexcel

    2. 将excel文件放到目录下, 我这里放到了 根目录下的 extend下, 文件名为 kuaidi.xls

    3. 加载文件, 生成读取对象, 读取excel并导入到数据库

  • ?

    PHPexcel读取excel数据

    戚莺

    展开

    PHPExcel是一个PHP类库,用来帮助我们简单、高效实现从Excel读取Excel的数据和导出数据到Excel。也是我们日常开发中,经常会遇到的使用场景。PHPExcel可以快速导入客户信息,避免人工录入信息的麻烦。这里分享下读取数据的过程

    1. 下载PHPexcel, 我这里下载的PHPExcel-1.8

    2. 将下载的文件解压缩拷贝到项目目录中,如图:

    3. 准备好要读取的excel文件,如图:

    4. 加载PHPexcel文件并读取数据:

    5. 读取结果如下:

  • ?

    整理关于java读取excel内容的例子供大家参考

    范荆

    展开

    1POI简介

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    2POI下载

    poi下载地址:https://apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz

    下载之后把压缩包解压,然后在项目里面引用解压文件夹里面的jar

    3新建java project,引入poi相关的jar

    4创建一个java类,编写代码

    package test;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import org.apache.poi.hssf.usermodel.HSSFRow;

    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class ReadExcel {

    /**

    * @param args

    */

    @SuppressWarnings("resource")

    public static void main(String[] args) {

    try {

    InputStream is = new FileInputStream(new File(

    "D:/360bizhi/0_TITLE_CODE.xls"));

    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

    // 获取每一个工作薄

    for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {

    HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

    if (hssfSheet == null) {

    continue;

    }

    // 获取当前工作薄的每一行

    for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {

    HSSFRow hssfRow = hssfSheet.getRow(rowNum);

    if (hssfRow != null) {

    String title_id = String.valueOf(hssfRow.getCell(0));

    // 读取第一列数据

    String title_name = String.valueOf(hssfRow.getCell(1));

    // 读取第二列数据

    String title_name_en = String.valueOf(hssfRow

    .getCell(2));

    System.out.println("===============title_id:"

    + title_id + ",title_name:" + title_name

    + ",title_name_en:" + title_name_en);

    } catch (Exception e) {

    e.printStackTrace();

    5运行main进行测试,查看打印结果

    打印结果和xls里面的值是一样的,说明读取excel成功

    请大家多多关注我的头条号,谢谢大家

  • ?

    R学习笔记系列—R语言从文本和Excel文件中读取数据

    慕靖儿

    展开

    1.4.1 从文本文件中导入数据

    可以使用 read.table() 函数从带分隔符的文本文件中导入数。调用格式为:

    这个函数看上去很复杂,但其实很多参数在使用时不用明确指出来,使用默认值可以满足绝大部分情况,因此实际使用还是比较简单的,下面我们简单介绍一下参数含义。

    file: 字符型,文件名称,要从中读取文件的完整路径。

    header: 逻辑型,指定是否在首行包含变量名,默认为 FALSE。

    sep: 字符型,分割字符,默认为"",代表空白字符,包括空格(一个或多个)、制表符、 换行符、回车

    dec: 字符型,指定小数点字符,默认为".",一般不用修改。

    numerals: 字符型,在数字转换会损失精度时的处理方法,allow.loss 表示允许精度损失;warn.loss 允许精度损失,但显示一条警告信息;no.loss 不允许精度损失,即转换为数字,而是转换为因子或者不转换,保留字符串形式。

    row.names 字符向量,为行指定名称。

    col.names 字符向量,为列指定名称,若列名在第一行定义好了,可不用。

    stringAsFactors: 逻辑型,是否将字符串自动编码为因子,默认为 TRUE。

    na.strings: 字符向量,定义代表缺失值的字符串,比如c("N",".")会将 "N" 和"." 两个字符读取为缺失值,默认为 "NA"。

    colClasses: 字符向量为列指定类型,比如c("numeric","character")指定第一列为数值型,第二列为字符型,若将某列指定为字符串,则不会将其自动编码为因子。

    nrows: 数值型,读取的最大行数,负数为不限制。

    skip: 数值型,读取前跳过的行数。

    check.names: 逻辑型,是否检查变量名在 R 中的有效性,默认为 TRUE。

    fill: 逻辑型,是否自动填充空白值,若各变量行数不一致,是否为空白列添加空白值。

    strip.white: 逻辑型,是否自动过滤掉字符型变量前后的空格。

    comment.char: 字符型,注释字符,以此字符开头的行将被忽略。

    blank.lines.skip 逻辑型,是否忽略空白行,默认为 TRUE。

    allowEscapes: 逻辑型,是否处理 C 语言风格的转意符。

    text: 字符型,直接指定要读取的字符串,此时 file 应该为空。

    encoding: 字符型,输入文本的编码,若出现乱码,请尝试更改此选项。

    fileEncoding: 字符型,文件编码,若出现乱码,请尝试更改此选项。

    假定我们有一个文本文件,students.txt,记录了6个学生的性别、身高和体重情况,其内容如下:

    那么我们可以用以下方式读取:

    read.table() 是读取按行列组织的数据的基础方式,其它同类函数,比如 read.csv() 等其实是用特定的选项调用了 read.table() 函数。在 read.table() 函数时,应尽量注意以下几点。

    1.建议明确地在首行定义变量名,并加上参数 header = TRUE。

    2.默认的分隔符为"",可以用空格、制表符、换行符等空白字符分割内容,若非空白分割,则需明确指出。

    3.字符型变量会被自动转换为因子型,在读大型文件时,将 stringsAsFactors 设置为 False,能加快读取速度。

    4.默认情况下,read.table 用 # 作为注释标识字符。如果碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。

    5.read.table()会尽量为每个变量选择合适的数据类型,若你想明确指定请用colClasses,或者生成后根据需要修改。

    6.若读中文时出现乱码,请尝试改变编码

    1.4.2 从 Excel 表格中读取

    从 Excel 里读取数据最简单的办法就是将 Excel 表格存储为以逗号分割的 csv 文件,然后用 read.csv() 函数读取。read.csv() 函数其实就是 read.table() 的定制版,其用法与 read.table() 基本一致。

    若要直接读取 Excel 文件,则需安装专门的包,本书推荐 readxl 包。

    readxl 中有若干读取 Excel 数据的函数,最常用的是 read.excel()。调用格式为:

    path: 字符型,文件路径sheet: 字符型或数值型。若为字符型,则指定 Sheet 名;若为数值,则指定 Sheet 的位置;若不指定,默认第一个Sheetrange: 字符型或数值型,读取的单元格范围,比较复杂,请查看文档col_names: 逻辑型或字符型向量;若为逻辑型,则指定是否将第一行作为变量名;若为字符向量,则直接定义各列名col_types: 字符型向量,定义各列数据类型,比如c("numeric","character");若不指定,则自动匹配na: 字符型向量,指定读取为缺失值的字符串 ,默认情况下,会将空单元格读取为缺失值trim_ws: 逻辑型,是否自动过滤掉字符型变量前后的空白(空格、制表符、换行符skip: 数值型,读取前跳过的行数,因为空白的行会自动跳过,所以这是最小的被跳过的行数n_max: 数值型,最大读取行数guess_max: 数值型,猜测列类别时,检测的最大行数

    假如,在 d 盘有一名为 students.xls 的 Excel 文件,你可以通过如下方式读取。

    喜欢闲适安静的生活,懂一点计算机编程,懂一点统计学和数据分析。(爱编程爱统计)

  • ?

    python初学之xlrd读取excel

    离开

    展开

            最近工作有个需求,把一个几十万的excel表格分开为若干小表格,每个表格5000条数据。手动分开的话浪费大量的时间,而且以后还有可能有类似需求。正好前段时间学习了下python的基础语法,打算用python写个小工具代替手动操作。

            经过各种百度,发现python操作excel还是比较简单的。现在记录如下,本文章只适合python小白阅读,大神们请绕道。

           

    开发工具PyCharm镇楼

    工作数据涉及机密,从网上随便下了个成语的excel文件

    首先安装xlrd,我的已经安装好了,所以提示是这样的。

    读取E盘下的chengxu.xlsx文件,并打印下第一个sheet页的行数。还是很简单的

    正式开始读取excel,打印第一行表头,和第二行的正式数据

    1万多条数据作死打印下,效率还行。学会读取了,下一步该excel就可以随意玩了。

  • 读取excel