python从excel中读取数据 写入word_Java调用python脚本,读取excel表格数据并写入word文档-Go语言中文社区...
前言
本人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数据写入表格生成图片_python在word文档里插入图片和表格实例代码演示
# -*- coding: UTF8 -*- from docx import Document from docx.shared import Pt doc = Document() # 文件存储路 ...
- python word 表格 缩进_python-docx处理word文档
前言 更多内容,请访问我的 个人博客. 前言 全网找了一番,用python创建和更新word(.docx)文档,还是 python-docx 包比较好用. 依赖Python 2.6, 2.7, 3.3 ...
- html在分页功能中如何实现当前页面的页码样式与其他页面不同_如何使用word文档?word文档使用技巧教程?...
Word文档使用方法与教程: 使用正确的部分和章节标题 我们在前面的章节中介绍了预设样式,但是这些样式可用于快速创建章节,子标题和标题页.在"主页"功能区选项卡中找到样式,可以在其 ...
- python处理word文档(docxtpl 中文说明文档)
一 docxtpl docxtpl 一个很强大的包,其主要通过对docx文档模板加载,从而对其进行修改. 主要依赖两个包 python-docx :读写doc文本 jinja2:管理插入到模板中的标签 ...
- python win32转pdf 横版_讲真,别再用win32com包来实现Word文档转PDF了
这几天有件大爽事. 之前一直放在Django原生的服务器的网站,终于放到Apache上了.并不是配置多难,也不是我懒,问题出在了用win32com实现word转pdf,我不能使用这个插件读取word, ...
- gorm软删除_GORM中文文档-Go语言中文社区
入门指南 GORM是类似Django ORM,对开发人员友好的 Golang ORM 库. 概览 全特性 ORM (几乎包含所有特性) 模型关联 (一对一, 一对多,一对多(反向), 多对多, 多态关 ...
- python调用metasploit自动攻击_Python脚本与Metasploit交互进行自动永恒之蓝攻击-Go语言中文社区...
我们首先利用 findTarget() 函数找到目标网段或目标主机中开放了445端口的主机,然后利用 confickerExploit() 函数将攻击代码写入 configure.rc 配置文件中,最 ...
- python casefold lower_Python学习之路(2)——字符串方法casefold和lower的区别(Python3.5)-Go语言中文社区...
最近在学习Python基础和一些视频教学中,发现字符串的内置函数(built-in functions)中有2个方法的作用非常相似:casefold和lower: str1='I love Pytho ...
- vue中使用file-saver插件导出文件(表格,图片,word文档等)
1. 安装 js安装 npm install file-saver --save ts安装 npm install @types/file-saver --save-dev 2.引入 import { ...
- html修改表格行间距,怎样修改word文档中表格的行间距
通常我们在Word中制作表格的时候,表格都不能一次性达到我们满意的效果,因为word表格的列宽及行高一般都是采用默认值.所以便需要我们对其行高和列宽作出调整,来达到自己需求的效果.那么有哪些方法可以让 ...
最新文章
- 推特雪花算法 java实现
- CSU1632Repeated Substrings(后缀数组/最长公共前缀)
- LeetCode-动态规划-213. 打家劫舍 II
- spring AOP策略模式使用
- 【Linux】一步一步学Linux——dpkg-reconfigure命令(272)
- Luogu P2577 [ZJOI2005]午餐
- linux shell 脚本 supress,《linux Shell 脚本攻略》进阶学习(第一部分)
- 文末赠书100本 | 当下最火爆的机器学习算法
- DOTNET Core MVC(二)路由初探
- CVPR 2020 论文大盘点—目标跟踪篇
- asp.net core webapi Session 内存缓存
- 这是我对智能制造的所有理念
- 微信小程序 禁止弹框下面的内容滑动
- w ndows10备份,Win10备份工具哪个最好?轻松备份会让你知道
- EEGLAB工具箱的下载与安装
- php 算年龄,php – 根据出生日期计算年龄
- mysql的auto_increment报错1467
- 小学计算机基础知识思维导图,简单易懂的小学除法思维导图
- 如何查看linux系统版本
- 使用 redis 连接指定端口的 redis 数据库