Python编写Excel:openpyxl最大行数解析与实战

创始人
2024-12-16 05:54:30
0 次浏览
0 评论

Python写excel多少行最多

简介:今天,首席CTO的笔记在这里分享您有关Excel中Python编写的类的最大数量的相关主题,并且不要忘记解决您现在面临的问题,现在就开始这个博客。

写xlsx时pythonopenpyxl最多可以写多少行

不超过100行

最近;我必须帮助一位RA姐妹整理Excel表格。
源数据是4000多个Excel工作表,分布在9个xlsm文件中。
由于文件内容是中英文数据的组合,所以从每个表中提取出必要的部分,并按类别组合成大表。

寻找工具

决定任务后,第一步是找到合适的库。
?PythonExcel是xlrd;尽管列出了xlwt和xlutils软件包

它们都相当老了,而且xlwt在版本07之后甚至不支持excel

它们的文档不是很有帮助。
您可能需要阅读源代码;除了姐姐的工作要求很高之外,学年末没时间仔细读源码。

再搜索一下。
然后参考有人维护openpyxl就可以快速上手,它支持Excel07+,而且文档清晰易读。
安装

这个这很容易,使用pipinstallopenpyxl或哈哈~

因为我不需要处理图像。
头枕未安装。

一些注意事项

每个源文件大约1~2MB,足够小,可以直接读入内存进行处理。

显然他们整个团队都在win下工作,就像我们处理excel一样(所有数据都存储在excel中==,人家主要从事业务工作...);该脚本应该在win<下运行/p>

此任务根本不需要修改现有文件。
羞耻......读取另一个文件;所有您需要做的和编写的

学习使用

好吧,打开cmd并使用pythonshell来玩它。
让我们开始教程吧...(win下没有安装ipython,羞耻)

基本上,您只需导入两个内容即可创建这个小脚本。

fromopenpyxlimportWorkbookfromopenpyxlimportload_workbook

load_workbook,顾名思义,Workbook是最基本的类,用于创建文件并最终将其写入磁盘。

工作

首先我需要导入这个文件

inwb=load_workbook(filename)

你得到的是一个工作簿对象

然后我们需要创建一个新文件

outwb=Workbook()

然后在这个新文件中,使用create_sheet创建多个新工作表;例如

careerSheet=outwb.create_sheet(0,'career')

这将首先在头部插入一个名为career的工作表(即用法与pythonlis类似)。
t的插入)

接下来我需要遍历输入文件的每个工作表并根据表名进行处理(例如,如果表名不是数字,我不需要处理它)。
openpyxl与使用字典具有相同的帮助,通过工作簿get_sheet_names的工作表名称get_sheet_names获取工作表

forsheetNameininwb.get_sheet_names():ifnotsheetName.isdigit():继续

sheet=inwb[sheetName]

拿到sheet后;单击该列。
贺星关心。
为了让openpyxl根据工作表中数据的实际区域获取行和列,可以像列表一样使用方法sheet.rows和sheet.columns。
例如,如果要跳过数据少于2列的表;我可以写

iflen(sheet.columns)2:继续

如果你想得到对于此工作表数据的前两列,除了使用列和行来获取行之外,您还可以

colA,colB=sheet.columns[:2]


您还可以使用Excel处理此工作表的列。
获取区域的单元格代码;比如

cells=sheet['A1':'B20']

这有点像excel自带的拉两个的函数。
维区域~

为了方便操作,当您遇到没有C列的工作表时;我想创建一个与A列长度相同的空C列。
然后你可以使用sheet.cell。
如何通过跳过单元格编号并添加空值来跳过新列。

alen=len(colA)foriinrange(1,alen+1):

sheet.cell('C%s'%(i)).value=None

注意:Excel的单元格命名为1~

要获取单元格的值,单元格值(可以是左值或右值);它的类型是字符串;浮点数整数或时间(datetime.datetime)以及相应的数据类型将输出到excel文件中。

获取每个单元格的值后,就可以进行操作了~openpyxl会自动将字符串编码为unicode,所以字符串是unicode类型的。

除了cell.value可以逐个cell修改值;您还可以逐行追加工作表

sheet.append(strA,dateB,numC)

写入最后一个新文件时;只需直接使用workbook.save保存

outwb.save("test.xlsx")

即使它覆盖现有文件。
您之前读入内存的文件。

一些需要注意的事情

在遍历一列中的每个单元格时,如果想得到这个列对象中当前单元格的总和

foridx,cellinenumerate(colA):#dosome...

如果strip()中有单元格

防止检索到的数据两端出现不可见的空格(Excel文件的常见问题)。
如果工作表单元格中没有数据。
openpyxl会将其值设置为None;所以,如果要根据单元格值进行处理,最好使用

ifnotcell.valuecontinue

这样的语句来预先确定其类型。

ifnotcell.value?继续

如果要处理的excel文件中有很多n个。
例如,当你期待手机时间时,有些表中的数据可以是字符串;在这种情况下,您ifisinstance(cell.value,unicode):break

和另一个语句过程。

如果Win下的cmd已经将代码页简化为utf-8。
您可以使用936(GBK),它将自动从unicode转换。
GBK并输出到终端。

处理中文问题的一些小动作

我正在做的图表有一些超出GBK范围的字符;当您需要打印一些信息时,这是非常困难的。
幸运的是,行动取得了进展。
您可以忽略它们,只需用空格替换它们,然后打印。
noyingseperatorsdot=u'\u00b7'dash=u'\u2014'emph=u'\u2022'dot2=u'\u2027'seps=(u'.',dot,dash,emph,dot2)defget_clean_ch_string(chstring):"""中文字符串去除干扰部分。

用法:

cleanstring=get_clean_ch_string(chstring)?"""

cleanstring=chstringforsepinseps:

?cleanstring=cleanstring.replace(sep,u'')returncleanstring

此外,还有一个要求要改变;英文名[空格]中文名英文姓氏,英文名分为中文姓氏和中文名字。

首先,我需要区分英文和中文。
我的做法是经常使用unicode范围内的常用中英文字符。
英语和中文匹配正则模式如下:

#regexpatternmatchingallasciicharactersasciiPattern=ur'[%s]+'%''.join(chr(i)foriinrange(32,127))#regexpatternmatchingallcommonChinesecharactersandseporatorschinesePattern=ur'[\u4e00-\u9fff.%s]+'%(''.join(sep))

英语被替换为ASCII可打印字符范围。
是\u4e00-\u9ffff,这些sep是前面提到的GBK范围之外的字符。
除了简单的划分之外,只有中文名字,没有英文名字。
我们需要处理没有英文名又没有中文名的情况。
判断逻辑如下:

?engName,chName=split_name(name)?"""

matches=re.match('(%s)(%s)'%(asciiPattern,chinesePattern)name,)ifmatches-?#英文名+中文名

returnmatches.group(1).strip(),matches.group(2).strip()else-

matches=re.findall('(%s)'%(chinesePattern),name)

matches=''.join(matches).strip()ifmatches-?#Chinesenameonly

returnNone,匹配else:?#Englishnameonly

matches=re.findall('(%s)'%(asciiPattern),name)return''.join(matches).strip(),None

获取中文名后,由于该工作不需要姓名,因此需要将其分为姓氏和名字。
需要明确分开;我将坚持普通中文的名字是根据它们的分解方式来划分的——前两个或三个字符是姓氏,四个字符的前两个字符是姓氏,连字符的名字(少数民族名字)前面有。
姓氏。
(这里使用了之前的get_clean_ch_string函数来去除分隔符。
)如果名称较长并且没有分隔符。
整个字符串被假定为一个名称。
(名字的英文名字指姓氏,姓氏指姓氏。
第2333章,WX将返回为姓氏...WXYZ,全名将返回

?asthelastname。

*Ifthenameis..ABC*XYZ...,beforehelastname

will替换中间名。

用法:

chFirstName,chLastName=split_ch_name(chName)?""

iflen(ch名称)4:?#XYorXYZ

chLastName=chName[0]

chFirstName=chName[1:]eliflen(chName)==4:?#WXYZ

?ch姓氏?=chName[:2]

chFirstName=chName[2:]else:?#longer

?cleanName=get_clean_ch_string(chName)

?nameParts=ceanName.split()printu''.join(nameParts)iflen(nameParts)2:?#...WXYZ

returnNone,nameParts[0]

?LastName,chFirstName=nameParts[:2]?#..ABC*XYZ...

returnchFirstName,chLastName

用空格分隔英文名非常简单。
部分是名字;第二部分是姓氏,其余部分暂时可以忽略。

EXCELpython处理超过65536行的Excel表格应该怎么做?2007及更高版本可以添加EXCEL2007或1,048,576行。

2.对于EXCEL2003以下的版本,它有256列和65536行。
对于EXCEL2007,有16384列和1048576行。
需要检查最大行数和列数;您可以使用Ctrl+向下箭头键和向右箭头键。

使用Python编写Excel文件时;当行数或列数超过256时会出错。
请开始使用我,不明白。

我也经历过,而且当我改用win32com使用excel时,写起来非常舒服。
您可以在百度搜索

多种使用方法Pythonxlwt最多可以写入多少行?

附件是使用xlwt生成excel2003和3007的完美示例~。

PS:花一大笔钱,值了绝对值得。

如果对您有帮助,请采纳。

结论:如果你想进一步了解Python可以编写多少个Excel类,上面CTO笔记介绍的所有主题对大家都有帮助。
记得收藏并关注本站。

python用input只能输入单行文本。那么,如何输入多行文本?

通过使用iter()函数结合输入和for循环,您可以输入多行文本。
具体操作如下:在命令行中连续输入多行文本,输入完每行后按回车键。
输入最后一行文本后,再按两次Enter键即可结束输入。
例如:123456789输入结果如下:123456789注意,for循环中使用了forlineiniter(input,'')结构体。
该结构体每次将输入的字符内容赋给一个字符串,并自动在字符串中换行。
当连续输入两次回车键时,会触发异常,表示输入操作结束。
文章标签:
openpyxl Excel
热门文章
1
Python编程入门:全面解析Pytho... python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...

2
Python字典操作全解析:添加、修改、... &#65279;Pythondict字典基本操作(包括添加、修改、删除键...

3
Python错误处理与异常处理:构建稳定... 2.5错误处理与异常在编程领域,错误处理和异常处理是保证程序稳定性和健壮性的关键...

4
Python数据转换攻略:字符串、列表、... Python字典、字符串及列表的相互转换Python中数据转换的艺术:从字典和字...

5
Python列表相加与求和技巧解析 重温python基础:列表相加的方法(两个list[]加法)今天,我们来看看Py...

6
Python运行快捷键大揭秘:高效操作,... python运行按哪个键运行Python时的快捷键包括Ctrl+Shift+F1...

7
Python字符与数字互转攻略:轻松掌握... python&#160;字符与数字如何转换Python是一种功能强大且结...

8
Python字符串转列表:两种常用方法解... python怎么将字符串转换为列表Python中将字符串转换为列表的方法有多种,...

9
Python字符串转列表:两种常用方法解... python怎么将字符串转换为列表在Python中将字符串转换为列表的方法有很多...

10
Python列表转字符串全攻略:掌握四种... Python列表到字符串–如何在Python中转换列表在Python中,将列表转...