失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python从excel中读取数据 写入word_Java调用python脚本 读取excel表格数据并写入wor

python从excel中读取数据 写入word_Java调用python脚本 读取excel表格数据并写入wor

时间:2023-10-08 10:04:58

相关推荐

python从excel中读取数据 写入word_Java调用python脚本 读取excel表格数据并写入wor

前言

本人python零基础,但是听说Java直接读取excel和直接操作word比较麻烦,所以最近在学习Java调用python脚本进行excel和word的操作。本人没有下载python的其他编译器,因为它自带有一个编译器,虽然不是很好用。我用的python版本是3.7.15。

python实现读取excel指定表格的数据

import openpyxl

#读取excel表格数据

def getCell(wb, sheetname, column):

#指定读取哪个Sheet(每个excel表格默认有三个Sheet:Sheet1,Sheet2,Sheet3)

table = wb[sheetname]

#读取哪一列数据

cell = table[column]

for c in cell:

if (c.value):

#过滤没有数据的行

#打印结果

print(c.value)

if __name__ == "__main__":

path = 'E:\temp\test.xlsx'

#excel对象

wb = openpyxl.load_workbook(path)

#print(wb.sheetnames)

#print(wb.active)

sheetname = wb.sheetnames[0]

#print(sheetname)

column = 'B'

getCell(wb, sheetname, column)

if name == “main”:是程序的入口,相当于Java的main方法,这个代码比较简单,意思是读取test文件的B列数据,然后判断是否为空,输出不是空的值。

python操作word文档

首先是进入python的根路径下面,执行

pip install mailmerge

顾名思义下载mailmerge

然后操作word文档:在需要插入数据的地方做如下操作:

选择域:

格式也可以做相应选择,但是由于这里只是demo,所以不做规定,选择无。

这样子word文档的操作就完成了,关闭文档。

接下来就是写python脚本来操作word文档了。

from mailmerge import MailMerge

# 打印模

template = "E:\temp\pythonTest.docx"

fix="lixiaoli2"

name1='lixiaoli'

# 创建邮件合并文档并查看所有字段

document_1 = MailMerge(template)

#print("Fields included in {}: {}".format(template,document.get_merge_fields()))

document_1.merge(

name=u''+name1

)

document_1.write('E:\temp\'+fix+'.docx')

这个代码也是比较好理解,template表示的是刚刚所操作文档的路径加名称,name1表示的是name的值,这里是写死的,fix是新生成的文件的名字,也是写死的,document_1.merge里面就是给参数赋值,name=u’’+name1 表示将name1的值赋给name,这里u表示编码。document_1.write(‘E:temp’+fix+’.docx’)表示新文件的路径和文件名。运行后可以去指定的路径下面查看生成的文件:

python读取excel表格数据后写入word文档相应位置

import openpyxl

from mailmerge import MailMerge

#将数据写入wod文档

def writeDocx(name, filename):

template = "E:\temp\pythonTest.docx"

document_1 = MailMerge(template)

#print("Fields included in {}: {}".format(template,document.get_merge_fields()))

document_1.merge(

name=u''+name

)

document_1.write('E:\temp\'+filename+'.docx')

#读取excel表格数据

def getCell(wb, sheetname, column):

#指定读取哪个Sheet(每个excel表格默认有三个Sheet:Sheet1,Sheet2,Sheet3)

table = wb[sheetname]

#读取哪一列数据

cell = table[column]

#print(cell[0].value)

writeDocx(cell[1].value,cell[1].value)

#for c in cell:

#if (c.value):

#过滤没有数据的行

#打印结果

#print(c.value)

if __name__ == "__main__":

path = 'E:\temp\test.xlsx'

#excel对象

wb = openpyxl.load_workbook(path)

#print(wb.sheetnames)

#print(wb.active)

sheetname = wb.sheetnames[0]

#print(sheetname)

column = 'B'

getCell(wb, sheetname, column)

这个代码是整合了上面读取excel表格数据和写入word文档的方法。首先,从if name == "main"入口开始,读取’E:temp'的test文件,调用getCell方法读取excel表格B一列的数据。在getCell方法中,cell是excel表格B一列的数据,然后调用writeDocx方法来操作word文档,name和filename参数都是cell[1]的值。

这个方法是可以直接运行的,但是回归原来的目的,是Java调用pytho脚本,所以这里利用Java代码来运行:

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class PythonTest {

public static void main(String[] args) {

try {

System.out.println("start");

String[] args1=new String[]{"E:\python\python.exe","E:\pythonWorkspace\ExcelTest.py"};

Process pr=Runtime.getRuntime().exec(args1);

/*

BufferedReader in = new BufferedReader(new InputStreamReader(

pr.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

System.out.println(line);

}

in.close();

pr.waitFor();*/

System.out.println("end");

} catch (Exception e) {

e.printStackTrace();

}}

public void test(){

System.out.println("我的第一个方法C");

}

运行Java的main方法,这就运行了python脚本,读取了相应表格的数据并且对word文档进行了操作。

补充说明Runtime.getRuntime().exec()方法

这个方法相当于是运行cmd窗口来运行相应的python脚本。args1数组表示相应的参数,他的长度是没有限制的。其中第一个参数E:pythonpython.exe表示python的运行环境,如果电脑配置了python的环境变量,是可以直接写python的。第二个参数是要运行的相应的py文件。我的代码里面只有这两个参数,因为我只需要用到这两个参数,但是事实上,是可以远不止有这两个参数的,下面来举例说明:

创建一个py脚本:

import sys

if __name__ == '__main__':

a=sys.argv[0]

print(a)

Java代码:

public class PythonTest {

public static void main(String[] args) {

try {

System.out.println("start");

String[] args1=new String[]{"E:\python\python.exe","E:\pythonWorkspace.py","lixiaoli","lixioali11111"};

Process pr=Runtime.getRuntime().exec(args1);

BufferedReader in = new BufferedReader(new InputStreamReader(

pr.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

System.out.println(line);

}

in.close();

pr.waitFor();

System.out.println("end");

} catch (Exception e) {

e.printStackTrace();

}}

public void test(){

System.out.println("我的第一个方法C");

}

}

其中arh1参数增加了几项,运行结果为:

修改py文件:

import sys

if __name__ == '__main__':

a=sys.argv[1]

print(a)

运行结果为:

这样的结果应该显而易见sys.argv[1]和sys.argv[0]的作用了。如果参数需要从Java传到python,那么就可以利用这个方法。

总结

其实Java也可以实现excel和word的相应操作,但是比较麻烦,所以才使用了python,python作为小工具来用,也确实挺方便的。

python从excel中读取数据 写入word_Java调用python脚本 读取excel表格数据并写入word文档-Go语言中文社区...

如果觉得《python从excel中读取数据 写入word_Java调用python脚本 读取excel表格数据并写入wor》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。