阅读本文大约需要2分钟
Officetouch:办公如此轻松
主要内容:Excel办公自动化
适用人群:Python初学者,办公室人员,或有志从事数据分析工作的人员
准备内容:Anaconda
摘要
今天Officetouch为大家带来关于Python办公自动化入门的知识。不知大家有没有遇到过这样的问题:需要把Excel同类项的内容进行合并(比如上图左边“工号”相同的角色合并成右边这样用逗号隔开),我们可以在Excel上安装Power Query/Power Pivot插件来解决,但是操作有点繁琐,安装一个不常用的插件不说,还不太好理解,大家可以看下这种方式:
方案1、用Power Query的方式:(想用Python自动化解决方法,直接跳到方案3)
步骤1、安装Power Query插件;
步骤2、点击数据 — 自表格/区域,上传到PQ界面;
(如果上传后数据格式不是文本,需要先改一下数据类型)
步骤3、主页 — 分组依据,分组依据如图所示;
步骤4、将List.Sum([Invoice])改为Text.Combine([Invoice]。
点击确定后,可以看到发票一列显示Error,因为文本格式是无法求和的。改公式,将List.Sum([Invoice])改为Text.Combine([Invoice], "/"),然后按回车。
方案2、在Excel上用VB编程的方式:(想用Python自动化解决方法,直接跳到方案3)
原始数据如下,A列包含重复的姓名,B列是对应的不同数量或者说型号。需要将A列数据去除重复值,并且将B列的同一个人的数量合并在一个单元格里并用逗号分开。
步骤1、将AB列的抬头,复制到CD列;
步骤2、按Alt+F11进入VBE界面;
步骤3、选择【插入】-【模块】插入一个模块;
步骤4、在模块空白处粘贴下列代码:
Sub yy()
Dim Arr, i&, d, Myr&
Set d = CreateObject("Scripting.Dictionary")
[c2:d65535].Clear
Myr = [a65536].End(xlUp).Row
Arr = Range("a1:c" & Myr)
For i = 2 To UBound(Arr)
If Not d.exists(Arr(i, 1)) Then
d(Arr(i, 1)) = Arr(i, 2)
Else
d(Arr(i, 1)) = d(Arr(i, 1)) & "," & Arr(i, 2)
End If
Next
k = d.keys
t = d.items
[c2].Resize(d.Count, 1) = Application.Transpose(k)
[d2].Resize(d.Count, 1) = Application.Transpose(t)
End Su
步骤5、返回excel界面,点击【开发工具】,插入一个按钮;
步骤6、用鼠标左键在工作表中画出一个按钮,并指定宏至刚才插入的宏;
方案3、Python办公自动化的方式:
Officetouch今天为大家分享一个最简易的方法,从这个合并同类项内容开始,我们逐步学习办公自动化。原表(person_role.xlsx)如下:
步骤1、打开Anaconda-Spyder,粘贴如下代码,运行后打开“test.xlsx”就可以看到效果了:
import pandas as pd
df = pd.read_excel("person_role.xlsx")
df["角色"]=df["角色"].astype(str) #这一步在pycharm中是必要的
df1=df.groupby(["工号","姓名"]).apply(lambda x:[",".join(x["角色"])])
col1 = ["角色"]
df2 = pd.DataFrame(df1,columns=col1)
df2.to_excel("test.xlsx",sheet_name="sheet2")
是不是很神奇?1个步骤就搞定了,用Python办公自动化确实提高了效率!
结尾语
好了,今天大家学会如何用Python实现Excel合并同类项内容了吗?是不是激起了大家学习Python办公自动化的兴趣和斗志,Officetouch相信只要大家抱着解决工作和生活问题的决心,不久后我们就能成为职场高手。
如果觉得有用的话,请帮忙点赞、关注、收藏哦,Officetouch感谢您的支持!