精华内容
下载资源
问答
  • Java读取Word文档中指定位置(可以自己自定义位置)的表格数据或文本内容 * @param filePath 文档路径 * @param start 指定位置开始读取表格数据的该位置上的字符串 * @param end 指定位置开始结束读取表格数据的该...
  • 在做大数据分析的时候,需要将word表格中的图片重命名成指定名字然后保存到文件夹中,一个个复制粘贴肯定不行,就研究了一下Java读取word表格中图片的事情,在此做个记录 如下图,将表格中第二列的图片以第四列的...

    一、背景

    在做大数据分析的时候,需要将word表格中的图片重命名成指定名字然后保存到文件夹中,一个个复制粘贴肯定不行,就研究了一下Java读取word表格中图片的事情,在此做个记录

    如下图,将表格中第二列的图片以第四列的名称命名然后保存到文件夹中

    二、实现步骤

    1.随便建个maven项目(因为需要导包,使用maven更方便一些,gradle当然也可以)

    2.pom.xml添加maven依赖包

    
            <!-- poi包 -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.8</version>
            </dependency>
    
            <!-- poi处理xlsx格式,用于处理word中的表格 -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.8</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>3.8</version>
            </dependency>

    3.写个test方法处理文件

     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Iterator;
    import java.util.List;
    import java.util.UUID;
    
    import org.apache.poi.POIDocument;
    import org.apache.poi.POIXMLDocument;
    import org.apache.poi.POIXMLTextExtractor;
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.model.PicturesTable;
    import org.apache.poi.hwpf.usermodel.Picture;
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
    import org.apache.poi.xwpf.usermodel.*;
    
    import org.junit.jupiter.api.Test;
    
    
    public class WordTest {
    
    /**
         * @Author: zoe
         * @Date: 2020/9/10 16:30
         * @Description: 循环word文档中表格中的图片,重命名固定保存在文件夹中
         * @Param: []
         * @Return: void
         */
        @Test
        public void testimg(){
            String path = "D:\\word\\test1.docx";
            String imgpath = "D:\\word\\img\\";
            String content = null;
            try {
                File file = new File(path);
                if (file.exists() && file.isFile()) {
    
                    //文件流
                    InputStream is = new FileInputStream(file);
                    XWPFDocument xwpfDocument = new XWPFDocument(is);
                    Iterator<XWPFTable> it = xwpfDocument.getTablesIterator();
    
                    while (it.hasNext()){//循环表格
                        XWPFTable table = it.next();
                        int rcount = table.getNumberOfRows();
                        System.out.println(rcount);
                        StringBuffer str = new StringBuffer();
                        for (int i = 1; i < rcount; i++) {//行
                            XWPFTableRow row = table.getRow(i);
                            XWPFTableCell ce =  row.getCell(2);
                            System.out.println("cell2"+ce);
                            List<XWPFTableCell> cells = row.getTableCells();
                            if(cells.size()>0){
                                //因为需要第二列图片信息和第四列信息做图片名称
                                //  所以我们这里只需取第二列和第四列信息即可不需要循环每一列
                                XWPFTableCell cell = cells.get(3);//图片名称
                                List<XWPFRun> runs = cell.getParagraphs().get(0).getRuns();
                                XWPFRun r = runs.get(0); //序号 图示 说明
                                String textname = r.getText(r.getTextPosition());
                                System.out.println(textname+"gggggg");
    
                                XWPFTableCell cell2 = cells.get(1);//图片
                                List<XWPFRun> runs2 = cell2.getParagraphs().get(0).getRuns();
                                XWPFRun r2 = runs2.get(0); //序号 图示 说明
                                String text = r2.getText(r.getTextPosition());
                                if(text == null){//图片
                                    List<XWPFPicture> pictureList = r2.getEmbeddedPictures();
                                    for (int m = 0; m <pictureList.size() ; m++) {
                                        XWPFPicture pic = pictureList.get(m);
                                        byte[] picbyte = pic.getPictureData().getData();
                                        FileOutputStream fos = new FileOutputStream(imgpath+"/"+textname+".png");
                                        fos.write(picbyte);
                                        //图片保存
                                        System.out.println("add picpure"+r.getEmbeddedPictures().size()+imgpath+"/"+textname+".png");
                                    }
    
                                }
                            }
    
    
    
                          //正常是循环列表中的每一列处理信息
                          /*  for (int j = 0; j < cells.size()-1 ; j++) {//列
                                XWPFTableCell cell = cells.get(3);
                                for (int k = 0; k < cell.getParagraphs().size(); k++) {
                                    List<XWPFRun> runs = cell.getParagraphs().get(j).getRuns();
                                    for (int l = 0; l <runs.size() ; l++) {
                                    XWPFRun r = runs.get(l); //序号 图示 说明
                                    String textname = r.getText(r.getTextPosition());
                                    str.append(textname);
                                    System.out.println(r.getText(2)+"gggggg");
                                    System.out.println(r.getSubscript().toString());
                                    System.out.println(r.getFontFamily());
                                    XWPFRun r1 = runs.get(1);
                                    String text = r.getText(r.getTextPosition());
                                     if(text == null){//图片
                                         List<XWPFPicture> pictureList = r.getEmbeddedPictures();
                                         for (int m = 0; m <pictureList.size() ; m++) {
                                             XWPFPicture pic = pictureList.get(m);
                                             byte[] picbyte = pic.getPictureData().getData();
                                             FileOutputStream fos = new FileOutputStream(imgpath+"/"+textname+".png");
                                             fos.write(picbyte);
                                             System.out.println("add picpure"+r.getEmbeddedPictures().size());
                                         }
                                     }
                                   }
                                 //  }
                                    str.append("\n");
                                }
    
                            }*/
    
    
                        }
    
                    }
    
                    is.close();//关闭流
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    }

    结果:

     

    这只是个简单的范例,有更复杂的操作需要优化过程 ,封装一个通用的工具类来处理word中的信息

     

    关注

    如果有问题,请在下方评论

    想获得更多的学习知识请关注微信公众号:西北码农或扫下方二维码


    展开全文
  • Java使用poi读取word文档中的表格

    万次阅读 热门讨论 2018-09-14 17:32:44
    使用poi读取文档中的表格,当有多个表格时可以指定需要读取表格,同时支持读取docx和doc格式。需要添加poi的jar包 测试文档如下图: 程序代码:  package com.fise19.read; import java.io....

    使用poi读取文档中的表格,当有多个表格时可以指定需要读取的表格,同时支持读取docx和doc格式。需要添加poi的jar包

    测试文档如下图:

    程序代码: 

    package com.fise19.read;
    
    import java.io.FileInputStream;
    import java.util.Iterator;
    import java.util.List;
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.usermodel.Paragraph;
    import org.apache.poi.hwpf.usermodel.Range;
    import org.apache.poi.hwpf.usermodel.Table;
    import org.apache.poi.hwpf.usermodel.TableCell;
    import org.apache.poi.hwpf.usermodel.TableIterator;
    import org.apache.poi.hwpf.usermodel.TableRow;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableCell;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
    
    /**
     * 
     * 读取word文档中表格数据,支持doc、docx
     * @author Fise19
     * 
     */
    public class ExportDoc {
    	public static void main(String[] args) {
    		ExportDoc test = new ExportDoc();
    		String filePath = "D:\\new\\测试.docx";
    //		String filePath = "D:\\new\\测试.doc";
    		test.testWord(filePath);
    	}
    	/**
    	 * 读取文档中表格
    	 * @param filePath
    	 */
    	public void testWord(String filePath){
    		try{
    			FileInputStream in = new FileInputStream(filePath);//载入文档
    			// 处理docx格式 即office2007以后版本
    			if(filePath.toLowerCase().endsWith("docx")){
    				//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后   
    				XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息
    				Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格
    				// 设置需要读取的表格  set是设置需要读取的第几个表格,total是文件中表格的总数
    				int set = 2, total = 4;
    				int num = set;
    				// 过滤前面不需要的表格
    				for (int i = 0; i < set-1; i++) {
    					it.hasNext();
    					it.next();
    				}
    				while(it.hasNext()){
    					XWPFTable table = it.next();  
    					System.out.println("这是第" + num + "个表的数据");
    					List<XWPFTableRow> rows = table.getRows(); 
    					//读取每一行数据
    					for (int i = 0; i < rows.size(); i++) {
    						XWPFTableRow  row = rows.get(i);
    						//读取每一列数据
    						List<XWPFTableCell> cells = row.getTableCells(); 
    						for (int j = 0; j < cells.size(); j++) {
    							XWPFTableCell cell = cells.get(j);
    							//输出当前的单元格的数据
    							System.out.print(cell.getText() + "\t");
    						}
    						System.out.println();
    					}
    					// 过滤多余的表格
    					while (num < total) {
    						it.hasNext();
    						it.next();
    						num += 1;
    					}
    				}
    			}else{
    				// 处理doc格式 即office2003版本
    				POIFSFileSystem pfs = new POIFSFileSystem(in);   
    				HWPFDocument hwpf = new HWPFDocument(pfs);   
    				Range range = hwpf.getRange();//得到文档的读取范围
    				TableIterator it = new TableIterator(range);
    				// 迭代文档中的表格
    				// 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
    				int set = 1, total = 4;
    				int num = set;
    				for (int i = 0; i < set-1; i++) {
    					it.hasNext();
    					it.next();
    				}
    				while (it.hasNext()) {   
    					Table tb = (Table) it.next();   
    					System.out.println("这是第" + num + "个表的数据");
    					//迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
    					for (int i = 0; i < tb.numRows(); i++) {   
    						TableRow tr = tb.getRow(i);   
    						//迭代列,默认从0开始
    						for (int j = 0; j < tr.numCells(); j++) {   
    							TableCell td = tr.getCell(j);//取得单元格
    							//取得单元格的内容
    							for(int k = 0; k < td.numParagraphs(); k++){   
    								Paragraph para = td.getParagraph(k); 
    								String s = para.text();
    								//去除后面的特殊符号
    								if(null != s && !"".equals(s)){
    									s = s.substring(0, s.length()-1);
    								}
    								System.out.print(s + "\t");
    							}
    						}
    						System.out.println();
    					} 
    					// 过滤多余的表格
    					while (num < total) {
    						it.hasNext();
    						it.next();
    						num += 1;
    					}
    				}
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    }
    
    

    运行结果:

    这是第2个表的数据
    123	1	2	3	
    表2-1	1	2	3	
    表2-2	1	2	3	
    

     

     

    展开全文
  • 前言 本人python零基础,但是听说Java直接读取excel和直接操作word比较麻烦,所以最近在学习Java调用python脚本进行excel和word的...python实现读取excel指定表格的数据 import openpyxl #读取excel表格数据 def ge...

    前言

    本人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:\python\python.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零基础,但是听说Java直接读取excel和直接操作word比较麻烦,所以最近在学习Java调用python脚本进行excel和word的...python实现读取excel指定表格的数据import openpyxl#读取excel表格数据def getCell...

    前言

    本人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文档:在需要插入数据的地方做如下操作:

    b8ce64fe95354bd85f731a85f22f2de3.png

    选择域:

    2b59eb1f780b94708fa9f67510b49d44.png

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

    11b78c9af779c9508f190ab49b6c1181.png

    这样子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’)表示新文件的路径和文件名。运行后可以去指定的路径下面查看生成的文件:

    1403d84384d051ed55567c454fa91904.png

    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参数增加了几项,运行结果为:

    cff58a815cf59995d38ae70e9146b175.png

    修改py文件:

    import sys

    if __name__ == '__main__':

    a=sys.argv[1]

    print(a)

    运行结果为:

    18e41742a59410c3c5dee0009a217074.png

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

    总结

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

    展开全文
  • 2、testpoi.java文件(直接运行),是实现读取word文档中的表格的功能,可指定读取word文档中某行某列的文本的内容 3、poidemo是一个web工程,运行后,点击首页中的下载按钮,跳转到ReadWriteAndDownloadDocServlet,...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • Java资源包01

    2016-08-31 09:16:25
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包101

    2016-07-13 10:11:08
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包3

    热门讨论 2013-06-28 09:20:52
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包5

    热门讨论 2013-06-28 09:38:46
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包10

    热门讨论 2013-06-28 10:06:40
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包4

    热门讨论 2013-06-28 09:26:54
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包8

    热门讨论 2013-06-28 09:55:26
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     [TablePanel.java] 日历表格面板  [ConfigLine.java] 控制条类  [RoundBox.java] 限定选择控件  [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件...
  • java开源包9

    热门讨论 2013-06-28 09:58:55
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • java开源包7

    热门讨论 2013-06-28 09:52:16
    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
  • 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
  • 介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要包括Java Web编程基础、文件操作管理、图形图像与多媒体技术、窗体应用技术、JSP操作Word与Excel等。全书分6篇23章,共计600个实例和600个经验技巧。每...
  • 介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要包括Java Web编程基础、文件操作管理、图形图像与多媒体技术、窗体应用技术、JSP操作Word与Excel等。全书分6篇23章,共计600个实例和600个经验技巧。每...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

java读取word指定表格

java 订阅