精华内容
下载资源
问答
  • 桌面新建文件时,系统弹出没有找到项目 windows 10下 ** 1. 进入Windows defender安全中心** 2. 找到病毒和威胁防护并点击 3. 找到 病毒和威胁防护设置 管理设置 点击 3. 然后里面找到 管理受控文件夹访问权限 ...

    在桌面新建文件时,系统弹出没有找到项目

    windows 10下
    ** 1. 进入Windows defender安全中心**
    2. 找到病毒和威胁防护并点击
    3. 找到 病毒和威胁防护设置 管理设置 点击
    3. 然后在里面找到 管理受控文件夹访问权限 点击它
    4. 在里面找到文件夹限制访问 关掉它

    在这里插入图片描述

    展开全文
  • 文件夹内已经汇总了几十上百篇Doc/Docx文档,可能是各部门的总结,可能是工会入会申请,或者其它半格式化(毕竟不是表格)内容,如果没有VBA帮忙,你就要挨个打开,之后copy-n-paste里面的特定内容到你的Excel表里;...

    任务场景:

    1. 文件夹内已经汇总了几十上百篇Doc/Docx文档,可能是各部门的总结,可能是工会入会申请,或者其它半格式化(毕竟不是表格)内容,如果没有VBA帮忙,你就要挨个打开,之后copy-n-paste里面的特定内容到你的Excel表里;
    2. 你在网上白嫖了一段代码,但是发现能用是能用,但是摘出来的信息有几个突出问题:1)到处夹空格、夹不可见符号;2)因为Word排版的关系,抓到Excel里面有很多空单元格;3)抓出来的同类信息不在同一列(举例来说,同是一份俱乐部申请,A的“自我介绍“部分写1段,B的“自我介绍”部分写了5段,抓出来肯定占的单元格数量不同)。

    配料和思路

    这次结合我工作中遇到的问题先解决1、2里面的主要部分即:1.文件抓取;2.基本清理(去除字符串内空格);3.对导出到Excel表里的内容进行再排序,去掉因为排版问题造成的空单元格。水平有限,代码相当冗长,但好处在于用到的知识点少,操作简单粗暴合适和我水平类似的非IT专业人士。

    精确抓取特定内容的放在(下)里面介绍。

    1. 需要用到的技能

    • 文件系统操作:从Excel VBA里面打开(world.application.Document.Open)、关闭Word文档、判断文件夹内文件的个数(文件指针.Files.Count)
    • 字符串操作: 清理非打印字符(clean)、消除两端空格(trim)、后续还要用到查找(InStr)、截取(Left)等
    • 判断和循环:基础的If判断,Do While循环嵌套使用
    • Excel VBA里的单元格操作:对单元格里内容的删改

    2. 流程(建议结合代码看)

    1. 定义各种变量,告诉电脑给我在内存里准备好位置,我要出Excel外到Windows里面找文件,对他们进行操作了
    2. 生成Scripting FSO(即“为了把文件里的内容写到别的地方而设置的文件系统对象”)
    3. 把文件所在的文件夹地址丢给电脑,建立FP(文件指针),这时候电脑已经准备好对目标文件夹里的文件“动手”了
    4. 与此同时,把要写入的表格的内容框架搭建好,这里用的是数组(arr)形式,数组的第一行格列是表头。行数由目标文件夹里的文件数决定,列数由你自己决定(通常就是你想抓Word文档里多少次换行前的内容)。
    5. For each循环,开始逐一查看文件夹里的文件
    6. IF判断是否为doc/docx文档,是的话就打开文件,开始在文档里逐行读取再写入到数组里。word里面每一次换行(.Paragraph(行数))就往数组里向右写一个格,读好写好关闭文件。
    7. 遍历完文件夹内所有文件以后退出For each循环……假设一共读了10个文件,每个文件读前20列,那么这个数组的的size就是11行(带“表头”)20列
    8. 回到我们的Excel表,用UBound取出上面用的数组在两个维度上的最大值(比如11行、20列就是11、20)在工作表里划出一片区域。然后把数组里存的内容写到这个区域里面来。至此,最基本的抓取已经结束,代码见 Text_Capturing()部分**
    9. 对特定列里面的字符串去空格(详见本博客另一篇讲邮件中空格专杀的文章),代码见Space_Killer()部分
      10.检查表格里的空单元格:1.如果一个单元格式空的但它右边的非空,就把右边的挪过来(内容赋值进来,再从原位置删掉);2.如果一个单元格和它右边的都是空的,就把再右边一个里的内容放进来…,大部分情况下很少有连续空三个的,代码见Empty_Cell_Killer()部分

    3. 结果

    几十个Word文档内前20多个换行里的内容别抓到了Excel里,而且没有因为排版空行造成的空单元格。

    假设我们抓的是几十位老师的教案信息,那么现在就差把他们长度不一的“摘要”、“教学目标”、“适用课程”等信息合并整理了到专门的列里面去了。

    咱们下回分解!

    上代码(小白级别,所以注释多且冗长)

    第一段,抓取部分主体

    Sub Text_Capturing()
    
        Rem 先进行系统层面上的准备
        Dim fso 'File System Obeject文件系统对象,要执行操作,先要在内存里生成一个任务对象
        Dim fp  'File Pointer文件指针。在新建的fso基础上进一步为其制定工作表所在路径
        Dim f_num '为了最后给用户报数用
        
        Rem 然后进行Office套件层面上的准备
        Dim wd  '定义Word程序对象,说白了就是告诉系统要用Word这个应用了,请加载到内存里
        Dim f   '在Word程序对象基础上创建文件对象,每遍历到一个doc/docx就是一个f
        Dim fname As String
        
        Rem 最后定义Excel内部要用到的变量
        Dim arr '数组对象,用数组的方式去写range
        Dim n As Long
        
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Worksheets("操作界面")
        Path = ws.Cells(8, 2) & "\" '即操作界面里请用户输入文件夹地址的那个地方
        Debug.Print Path
        
    
        
        Set fso = CreateObject("scripting.filesystemobject")
        Set fp = fso.getfolder(Path)
        f_num = fp.Files.Count
        
        ReDim arr(1 To f_num + 1, 1 To 24) '行数= 1到文件个数,列数=看要摘多少行内容了
        Rem 注意这里数组中表示行数部分要加1,才能容纳表头,如不加1,回导致下标越界
        
        arr(1, 1) = "被抓取文件名": arr(1, 2) = "案例编号与出版日期": arr(1, 3) = "1行"
        arr(1, 4) = "第2": arr(1, 5) = "3": arr(1, 6) = "4": arr(1, 7) = "5行"
        arr(1, 8) = "第6": arr(1, 9) = "7": arr(1, 10) = "8": arr(1, 11) = "9行"
        arr(1, 12) = "第10": arr(1, 13) = "11": arr(1, 14) = "12行"
        arr(1, 15) = "第13": arr(1, 16) = "14": arr(1, 17) = "15行"
        arr(1, 18) = "第16": arr(1, 19) = "17": arr(1, 20) = "18行"
        arr(1, 21) = "第19": arr(1, 22) = "20": arr(1, 23) = "21行"    
        
        Set wd = CreateObject("word.application")    
        n = 1
        
        For Each f In fp.Files
        
            If Right(f, 3) = "doc" Or Right(f, 4) = "docx" Then
    
                n = n + 1
                arr(n, 1) = fso.getbasename(f) '如果此步骤显示下标越界,检查数组中行数部分是不少加了1
                fname = fso.getfilename(f)
                Debug.Print fname
                
                With wd.Documents.Open(Path & fname, True, True)
                    wd.Visible = True
                    Rem Word排版常常夹杂很多不可见符号和空格,所以在这一步就最好把clean、trim都用上,以防万一
                    arr(n, 2) = .Paragraphs(1).Range
                    arr(n, 2) = VBA.Trim(Application.WorksheetFunction.Clean(arr(n, 2)))
                    arr(n, 3) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(2).Range))
                    arr(n, 4) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(3).Range))
                    arr(n, 5) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(4).Range))
                    arr(n, 6) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(5).Range))
                    arr(n, 7) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(6).Range))
                    arr(n, 8) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(7).Range))
                    arr(n, 9) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(8).Range))
                    arr(n, 10) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(9).Range))
                    arr(n, 11) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(10).Range))
                    arr(n, 12) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(11).Range))
                    arr(n, 13) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(12).Range))
                    arr(n, 14) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(13).Range))
                    arr(n, 15) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(14).Range))
                    arr(n, 16) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(15).Range))
                    arr(n, 17) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(16).Range))
                    arr(n, 18) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(17).Range))
                    arr(n, 19) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(18).Range))
                    arr(n, 20) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(19).Range))
                    arr(n, 21) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(20).Range))
                    arr(n, 22) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(21).Range))
                    arr(n, 23) = VBA.Trim(Application.WorksheetFunction.Clean(.Paragraphs(22).Range))
                    .Close
                    
                End With
                
            End If
            
        Next
        
        wd.Quit
        
        'Sheets("初步输出").[a1].Resize(UBound(arr), UBound(arr, 2)) = arr
        ThisWorkbook.Worksheets("初步输出").[a1].Resize(UBound(arr), UBound(arr, 2)) = arr
        
        Call Space_Killer
        Call Empty_Cell_Killer
        
        MsgBox "本次共抓取目标文件夹内Doc/Docx文件" & f_num & "个,请在<初步输出>表查看内容后回<操作界面>进行进一步清理。"
    
        
        
        
    End Sub
    
    

    第二段,去掉抓取后特定列里面的各种空格(比如邮箱、电话、文件编号)

    这块我前面的博文里面写过,详细了解请点此移步

    Sub Space_Killer()
    
        Dim ridx As Long
        Dim ws_OutPut As Worksheet
        Dim org_content
        Dim space
        Dim L_part
        Dim R_part
        Dim Re_Concatenated
        
        Set ws_OutPut = ThisWorkbook.Worksheets("初步输出")
        ridx = 2
        
        Do While ws_OutPut.Cells(ridx, 2) <> ""
            
            Do While VBA.InStr(ws_OutPut.Cells(ridx, 2), " ") <> 0 '找不到才会等于0,找得到就不等于零
                
                Debug.Print org_content
                
                space = VBA.InStr(ws_OutPut.Cells(ridx, 2), " ") '找到现行字符串内空格的下标
                
                L_part = VBA.Trim(VBA.Left(ws_OutPut.Cells(ridx, 2), space)) '空格左边的截出来
                
                R_part = VBA.Trim(VBA.Right(ws_OutPut.Cells(ridx, 2), VBA.Len(ws_OutPut.Cells(ridx, 2)) - space)) '空格右边的部分截出来
                
                Re_Concatenated = L_part & R_part '把截好去了空格的两部分再重新对起来
                Debug.Print Re_Concatenated
                
                ws_OutPut.Cells(ridx, 2) = Re_Concatenated '把对起来的重新写入单元格
                
                Rem 如果字符串里面还有空格,那么下一轮循环的时候就会触发InStr()<> 0条件从而再去一遍
            
            Loop
            ridx = ridx + 1 '这个不要忘,忘了的话一个有空格的单元格就能让你EXCEL无响应
            
        Loop
    
    End Sub
    

    第三段,去掉Excel里面因为Word排版造成的空单元格

    Sub Empty_Cell_Killer()
    
        Dim ridx As Long
        Dim cidx As Long
        Dim ws_OutPut As Worksheet
        
        Set ws_OutPut = ThisWorkbook.Worksheets("初步输出")
        ridx = 2
        
        Do While ws_OutPut.Cells(ridx, 1) <> "" '只要有被被抓取的文件名就接着执行
            
            cidx = 3 '起始行列标为3,即编号和出版日期后面开始
            
            Do While cidx < 24 '最多23列,发现下一圈要转24自动跳出循环
            Rem 实际抓取情况千奇百怪,有的连续两个格子都是空格,就不能一个if走天下了
            
                Rem 情况1:如果本单元格为空,但是右边的不为空,就把右边的挪过来
                If ws_OutPut.Cells(ridx, cidx) = "" And ws_OutPut.Cells(ridx, cidx + 1) <> "" Then
                    ws_OutPut.Cells(ridx, cidx) = ws_OutPut.Cells(ridx, cidx + 1)
                    ws_OutPut.Cells(ridx, cidx + 1) = "" '☆重点再此
                    Rem 不要忘了清空挪到左边填空的单元格,如果仅是“复制”了内容去填左边的空,那么右边既有的信息就多余了
                   
                Rem 情况2:本单元格为空,右边一个也为空,那就得挪它右边第二个来了
                ElseIf ws_OutPut.Cells(ridx, cidx) = "" And ws_OutPut.Cells(ridx, cidx + 1) = "" Then
                    ws_OutPut.Cells(ridx, cidx) = ws_OutPut.Cells(ridx, cidx + 2)
                    ws_OutPut.Cells(ridx, cidx + 2) = ""
                
                Rem 情况3:如果本单元格为空,它右边两个也为空,直接跳出并报错,请求人工检查
                ElseIf ws_OutPut.Cells(ridx, cidx) = "" And ws_OutPut.Cells(ridx, cidx + 1) = "" And ws_OutPut.Cells(ridx, cidx + 2) = "" Then
                    
                    MsgBox "第 " & ridx & "" & cidx & "" & cidx + 1 & "" & cidx & "列连续出现空单元格,请检查原文件。"
                
                End If
                
                cidx = cidx + 1 '下次再往右挪一个单元格执行
            
            Loop
            
            ridx = ridx + 1 '下次再往下挪一个单元格执行
            
        Loop
        
        Rem 再来一遍……扫清漏网之鱼
        ridx = 2
        
        Do While ws_OutPut.Cells(ridx, 1) <> "" '只要有被被抓取的文件名就接着执行
            
            cidx = 3 '起始行列标为3,即编号和出版日期后面开始
            
            Do While cidx < 24 '最多23列,发现下一圈要转24自动跳出循环
            Rem 实际抓取情况千奇百怪,有的连续两个格子都是空格,就不能一个if走天下了
            
            Rem 情况1:如果本单元格为空,但是右边的不为空,就把右边的挪过来
            If ws_OutPut.Cells(ridx, cidx) = "" And ws_OutPut.Cells(ridx, cidx + 1) <> "" Then
                ws_OutPut.Cells(ridx, cidx) = ws_OutPut.Cells(ridx, cidx + 1)
                ws_OutPut.Cells(ridx, cidx + 1) = "" '☆重点再此
                Rem 不要忘了清空挪到左边填空的单元格,如果仅是“复制”了内容去填左边的空,那么右边既有的信息就多余了
                   
            Rem 情况2:本单元格为空,右边一个也为空,那就得挪它右边第二个来了
            ElseIf ws_OutPut.Cells(ridx, cidx) = "" And ws_OutPut.Cells(ridx, cidx + 1) = "" Then
                ws_OutPut.Cells(ridx, cidx) = ws_OutPut.Cells(ridx, cidx + 2)
                ws_OutPut.Cells(ridx, cidx + 2) = ""
                
            Rem 情况3:如果本单元格为空,它右边两个也为空,直接跳出并报错,请求人工检查
            ElseIf ws_OutPut.Cells(ridx, cidx) = "" And ws_OutPut.Cells(ridx, cidx + 1) = "" And ws_OutPut.Cells(ridx, cidx + 2) = "" Then
                    
                MsgBox "第 " & ridx & "" & cidx & "" & cidx + 1 & "" & cidx & "列连续出现空单元格,请检查原文件。"
                
            End If
                
            cidx = cidx + 1 '下次再往右挪一个单元格执行
            
        Loop
            
            ridx = ridx + 1 '下次再往下挪一个单元格执行
            
        Loop
        
        
    
    End Sub
    
    展开全文
  • 电脑中右键不能新建word和excel文档怎么办开始,找到运行命,输入regedit,打开注册表。左侧找到hkey_classes_root目录,并展开。首先,我们利用ctrlf快捷键,查找“docx”的位置,当然这里也可以自己下拉查找。...

    电脑中右键不能新建word和excel文档怎么办

    开始,找到运行命,输入regedit,打开注册表。

    在左侧找到hkey_classes_root目录,并展开。

    首先,我们利用ctrl

    f

    快捷键,查找“docx”的位置,当然这里也可以自己下拉查找。

    找到之后,不用展开目录。我们可以看到右侧有一个(默认),此时的默认值为word_auto_file,如果不是该值也不要紧。

    双击(默认)一项,将其改为

    word.document.12。

    关闭注册表,刷新桌面,这是我们发现右键新建中word神奇的回来了。

    按照同样的方法们进入注册表寻找“xlsx”的位置,并将(默认)改为excel.sheet.12;然后寻找“pptx”,将(默认)改为powerpoint.show.12。

    关闭注册表,回到桌面,多次刷新后,右键新建中的word、excel、ppt就全回来了。

    如果在注册表中使用ctrl

    f查找时,没有找到相应的目录,请注意图中标出的“查找下一个”。ctrl

    f只能查找该位置后的内容,请选择hkey_classes_root目录中的第一个目录后,重新查找。

    为什么不能新建microsoft excel表格

    您好,有右击文件夹空白页面查看过吗?

    如果选项中没有新建选项,请检查有无安装offic软件.

    打开

    开始----所有程序-----microsoft

    查看

    电脑新建里没有excel

    电脑新建里没有excel的具体解决步骤如下:

    1、首先我们启动电脑击开始目录下的所有程序,在电装的所以程序中找到我们想要新加到鼠标右键的安装程序。

    2、在程序目录里我们找到WPS软件,然后点开文件夹找到下方的“wps office 工具”。

    3、然后找到点击工具中的“配置工具”。

    4、找到后点击启动配置工具,在弹出的选择对话框点击“高级”。

    5、选择“重置修复”目录下的“重新注册组件”,修复完成后即可在桌面右键excel成功。

    电脑为什么不能新建excel?

    该提示不是说明不能“新建”,而是不能打开桌面一个命名为“新建 Microsoft Office Excel 工作表.xlsx”的工作簿。因为桌面可能这个簿名不存在或者已经进行了移动或删除。

    电脑不能新建WORD和EXCEL了怎么办?

    输入新建程序的修复代后导入注册表即可。

    电脑在“新建”里没有EXCEL,怎么加进去?

    1、电脑后点击开始---所有程序。

    2、找到WPS软件,点开文件到下方的“wps office 工具”。

    3、然后找到点击工具中的“配置工具。

    4、找到后点击启动配置工具,在弹出的选择对话框点击,“高级”。

    5、选择“重置修复”----“重新注册组件”,电脑新建里就会有excel了。

    为什么在桌面上无法新建excel电子表?

    到别人有新建Excel工作电脑里,导出注册表的下面的项:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew]

    然后用记事本打开,保留上面几行内容(同上),删除下面除“新建Excel工作表”及其下的内容以外,其它如新建Word……都删除。保存。

    然后拷贝到你电脑,双击导入进注册表。

    我的电脑不能新建WORD和EXCEL了,咋回事呢?

    应该是系统出现问题了,重新做个系统吧!

    展开全文
  • 文档从第三行开始,每一行代表一个化石及其相关的登记资料,如图1,现在需要将每一行数据的内容,填写到对应的word文档中,并将入库照片编号对应的照片插入对应位置,如图2,最后要求不能生成单个的word文档,因为...

    需求:

            现有一个excel文档,该文档从第三行开始,每一行代表一个化石及其相关的登记资料,如图1,现在需要将每一行数据的内容,填写到对应的word文档中,并将入库照片编号对应的照片插入对应位置,如图2,最后要求不能生成单个的word文档,因为文档个数多了,不方便整理和打印,需要合并成一个或者多个;

    图1:

    图2:

     

    实现思路:

            Java语言利用POI读取excel文档,利用Freemarker建立word模板(带图片),循环读取excel每一行数据并生成单个word文档,再利用POI合并成一个word文档。

    实现过程:

            一、准备模板:参考博客园文章Java 用Freemarker完美导出word文档(带图片)

                        1、word原件用eclipse或者其他编辑器如Firstobject free XML editor打开;

                        2、 把需要动态修改的内容替换成********(为了后面方便查找和替换),如果有图片,尽量选择较小的图片几十K左右,并调整好位置(导入图片时,不管什么尺寸的图片,都会按照现在固定好的格式大小及位置导入,也就是会出现图片被拉伸变形,如果没有对应的图片,图片位置会显示如下图);

                        3、另存为,选择保存类型Word 2003 XML 文档(*.xml)【这里说一下为什么用Microsoft Office Word打开且要保存为Word 2003XML,本人亲测,用WPS找不到Word 2003XML选项,如果保存为Word XML,会有兼容问题,避免出现导出的word文档不能用Word 2003打开的问题】,保存的文件名不要是中文;

                      4、用Firstobject free XML editor打开文件,选择Tools下的Indent【或者按快捷键F8】格式化文件内容。左边是文档结构,右边是文档内容;

                      5、 将文档内容中需要动态修改内容的地方,换成freemarker的标识。其实就是Map<String, Object>中key,如${landName};  (注意Map中不能没有对应的key,否则会报错,没有内容的话,value放个空字符串就好了

                      6、在加入了图片占位的地方,会看到一片base64编码后的代码,把base64替换成${image},也就是Map<String, Object>中key,值必须要处理成base64

                代码如:<w:binData w:name="wordml://自定义.png" xml:space="preserve">${image}</w:binData>

                注意:“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。

                如果需要循环,则使用:<#list maps as map></#list>  maps是Map<String, Object>中key,值为数组,map为自定义;

                     7、标识替换完之后,模板就弄完了,另存为.ftl后缀文件即可。注意:一定不要用word打开ftl模板文件,否则xml内容会发生变化,导致前面的工作白做了。

            二、读取excel---生成word文档---合并word文档(源码下载

                   小提示:

                     1、word前后格式要一致,这里代码可能不兼容doc,所以word原文档先另存为docx格式的,后续生成、合并等都要使用docx;

                    2、excel读取中,每一行的读取时,不要跳过空格单元格,因为向word中写入时,是按照excel中的位置读取的内容;

                    3、excel读取时,注意框线,有的话,最好是有内容的行列同意都加框线,尤其注意最后一列,缺少框线时读取会有问题;

                     主程序:

    package e2w;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    
    import sun.misc.BASE64Encoder;
    
    /**
     * 读取excel文件,把每一行转换为一个word文档数据
     * 
     * @author 15730
     *
     */
    public class MainOO {
    	
    	public static int qishibianhao;
    	public static File file;
    	public static String pic_url;
    	
    	
    	public static void main(String[] args) {
    
    		Boolean excel_is_exist=false;
    		Boolean num_is_right=false;
    		Boolean pic_url_is_right=false;
    		
    		while(true){
    			if(excel_is_exist==false){
    				Scanner s = new Scanner(System.in);
    				System.out.println("请输入excel文档完整路径,如:C:/Users/15730/Desktop/excel2word/新建 XLS 工作表 - 副本.xls,并按回车键");
    				String url = s.nextLine();  
    				file = new File(url);
    				if(!file.exists()){
    					System.out.println("您输入的文档不存在!");
    					continue;
    				}else{
    					excel_is_exist=true;
    				}
    			}
    			
    			if(num_is_right==false){
    				Scanner s = new Scanner(System.in);
    				System.out.println("请输入文档起始编号,1-9999之间的整数,如果输入1,则编号从M1-0001开始,如果输入123,则编号从M1-0123开始,输入完成后请按回车键");
    				int num = s.nextInt(); 
    				if(num>0&&num<10000){
    					qishibianhao=num;//记录初始编号
    					num_is_right=true;
    				}else{
    					System.out.println("您输入的内容错误!");
    					continue;
    				}
    				
    			}
    			//图片所在文件夹
    			if(pic_url_is_right==false){
    				Scanner s = new Scanner(System.in);
    				System.out.println("请输入图片存储的完整文件夹名称,如:C:/Users/15730/Desktop/excel2word/tupian/,并按回车键");
    				String url = s.nextLine();
    				File file = new File(url);
    				if(!file.exists()){
    					System.out.println("您输入的文件夹错误!");
    					continue;
    				}else{
    					if(file.isDirectory()){
    						pic_url=url;
    						pic_url_is_right=true;
    					}else{
    						System.out.println("您输入的文件夹错误!");
    						continue;
    					}
    					
    				}
    			}
    			
    			//全部准备好后,开始执行
    			if(excel_is_exist==true&&num_is_right==true&&pic_url_is_right==true){
    				break;
    			}
    			
    		}
    		
    		
    		try {
    			if(file==null){
    				System.out.println("文档不存在");
    				return;
    			}
    			
    			List<List<Object>> list_hang = CreatAndReadExcel.readExcel(file);
    			System.out.println("---------------------------------------------");
    			System.out.println("本文档行数:"+list_hang.size());
    			for (int i = 0; i < list_hang.size(); i++) {
    				if (i < 2) {
    					continue;
    				}
    				String biaoTouBianHao = getBiaoTouBianHao(qishibianhao++);// 表头编号
    				
    				List<Object> list_lie = list_hang.get(i);
    //				System.out.println(list_lie.size());
    //				System.out.println("---------------------------------------------");
    				// for(int j=0;j<list_lie.size();j++){
    				// System.out.println(list_lie.get(j));
    				// }
    
    				{
    					Map<String, Object> map = new HashMap<String, Object>();
    					map.put("bianhao", biaoTouBianHao);
    					// String xuHao = list_lie.get(0).toString();//需要,word用不到
    					String quDuanHao = list_lie.get(1).toString();// 区段号
    					map.put("quDuanHao", quDuanHao);
    					String yeWaiBianHao = list_lie.get(2).toString();// 野外原始编号
    					map.put("yeWaiBianHao", yeWaiBianHao);
    					String huaShiBianHao = list_lie.get(3).toString();// 化石编号
    					map.put("huaShiBianHao", huaShiBianHao);
    					String huaShiLeiBie = list_lie.get(4).toString();// 化石类别
    					map.put("huaShiLeiBie", huaShiLeiBie);
    					String buWeiMingCheng = list_lie.get(5).toString();// 部位名称
    					map.put("buWeiMingCheng", buWeiMingCheng);
    					String diCeng = list_lie.get(6).toString();// 地层
    					map.put("diCeng", diCeng);
    					String chanDi = list_lie.get(7).toString();// 产 地
    					map.put("chanDi", chanDi);
    					// String ruKuShiJian = list_lie.get(8).toString();
    					// //入库时间,此字段不需要
    					String huaShiJiBenMiaoShu = list_lie.get(9).toString();// 化石基本描述
    					map.put("huaShiJiBenMiaoShu", huaShiJiBenMiaoShu);
    					String ruKuZhaoPianBianHao = list_lie.get(10).toString();// 入库照片编号,根据图片名称,查找图片并插入word
    					
    					/**
    					 * 临时目录
    					 */
    					String src=pic_url+ruKuZhaoPianBianHao+".jpg";
    //					System.out.println("  ");
    //					System.out.println(" ---- "+src);
    					File pic = new File(src);
    					if(pic.exists()){
    						map.put("image", getImageBase(src));
    					}else{
    						map.put("image", "");
    					}
    					
    					// 以下三种保存方式,每个只有一种,前两种需要拆分字符串
    					String huoJiaBaoCun = list_lie.get(11).toString();// 货架保存
    																		// (架-列-层)
    					String MiFengGuiBaoCun = list_lie.get(12).toString();// 密集柜保存
    																			// (架-列-层)
    					String shaCaoBaoCun = list_lie.get(13).toString();// 沙槽保存
    
    //					System.out.println("区段号 : " + quDuanHao);
    //					System.out.println("野外原始编号 : " + yeWaiBianHao);
    //					System.out.println("化石编号 : " + huaShiBianHao);
    //					System.out.println("化石类别 : " + huaShiLeiBie);
    //					System.out.println("部位名称 : " + buWeiMingCheng);
    //					System.out.println("地层 : " + diCeng);
    //					System.out.println("产地 : " + chanDi);
    //					System.out.println("化石基本描述 : " + huaShiJiBenMiaoShu);
    //					System.out.println("入库照片编号 : " + ruKuZhaoPianBianHao);
    
    					// System.out.println("货架保存   (架-列-层) : "+huoJiaBaoCun);
    					// System.out.println("密集柜保存   (架-列-层) : "+MiFengGuiBaoCun);
    
    					if (huoJiaBaoCun != "") {//货架保存
    						String[] str = huoJiaBaoCun.split("-");
    						String huoJiaBaoCun_jiahao = str[0];
    						String huoJiaBaoCun_liehao = str[1];
    						String huoJiaBaoCun_cenghao = str[2];
    //						System.out.println("货架保存   (架) : "
    //								+ huoJiaBaoCun_jiahao);
    //						System.out.println("货架保存   (列) : "
    //								+ huoJiaBaoCun_liehao);
    //						System.out.println("货架保存   (层) : "
    //								+ huoJiaBaoCun_cenghao);
    						map.put("huoJiaBaoCun_jiahao", huoJiaBaoCun_jiahao);
    						map.put("huoJiaBaoCun_liehao", huoJiaBaoCun_liehao);
    						map.put("huoJiaBaoCun_cenghao", huoJiaBaoCun_cenghao);
    						map.put("MiFengGuiBaoCun_jiahao",
    								"");
    						map.put("MiFengGuiBaoCun_liehao",
    								"");
    						map.put("MiFengGuiBaoCun_cenghao",
    								"");
    						map.put("shaCaoBaoCun", "");
    					} else if (MiFengGuiBaoCun != "") {//密集柜保存
    						String[] str = MiFengGuiBaoCun.split("-");
    						String MiFengGuiBaoCun_jiahao = str[0];
    						String MiFengGuiBaoCun_liehao = str[1];
    						String MiFengGuiBaoCun_cenghao = str[2];
    //						System.out.println("密集柜保存   (架) : "
    //								+ MiFengGuiBaoCun_jiahao);
    //						System.out.println("密集柜保存   (列) : "
    //								+ MiFengGuiBaoCun_liehao);
    //						System.out.println("密集柜保存   (层) : "
    //								+ MiFengGuiBaoCun_cenghao);
    						map.put("MiFengGuiBaoCun_jiahao",
    								MiFengGuiBaoCun_jiahao);
    						map.put("MiFengGuiBaoCun_liehao",
    								MiFengGuiBaoCun_liehao);
    						map.put("MiFengGuiBaoCun_cenghao",
    								MiFengGuiBaoCun_cenghao);
    						map.put("huoJiaBaoCun_jiahao", "");
    						map.put("huoJiaBaoCun_liehao", "");
    						map.put("huoJiaBaoCun_cenghao", "");
    						map.put("shaCaoBaoCun", "");
    					} else if (shaCaoBaoCun != "") {//沙槽保存
    //						System.out.println("沙槽保存 : " + shaCaoBaoCun);
    						map.put("shaCaoBaoCun", shaCaoBaoCun);
    						map.put("MiFengGuiBaoCun_jiahao",
    								"");
    						map.put("MiFengGuiBaoCun_liehao",
    								"");
    						map.put("MiFengGuiBaoCun_cenghao",
    								"");
    						map.put("huoJiaBaoCun_jiahao", "");
    						map.put("huoJiaBaoCun_liehao", "");
    						map.put("huoJiaBaoCun_cenghao", "");
    					} else {
    						System.out.println("第"+(i+1)+"行存在格式问题,请注意检查是否存在少边框或者三种存储方式都为空的情况");
    					}
    					WordUtils.exportWord(map, biaoTouBianHao, "map.ftl");
    				}
    			}
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    		// WordUtils.exportMillCe。rtificateWord(getRequest(),getResponse(),map,"方案","sellPlan.ftl");
    	}
    	
    	public static String getBiaoTouBianHao(int i){
    		String biaoTouBianHao = "M1-";//"M1-0001"
    		String num = new Integer(i).toString();
    		String temp="";
    		switch (num.length()) {
    			case 1:
    				temp = "000";
    				break;
    			case 2:
    				temp = "00";
    				break;
    			case 3:
    				temp = "0";
    				break;
    			case 4:
    				temp = "";
    				break;
    			default:
    				break;
    		}
    		return biaoTouBianHao+temp+num;
    	}
    	
    	//获得图片的base64码
        @SuppressWarnings("deprecation")
        public static String getImageBase(String src) {
            if(src==null||src==""){
                return "";
            }
            File file = new File(src);
            if(!file.exists()) {
                return "";
            }
            InputStream in = null;
            byte[] data = null;  
            try {
                in = new FileInputStream(file);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
            try {
                data = new byte[in.available()];  
                in.read(data);  
                in.close();  
            } catch (IOException e) {  
              e.printStackTrace();  
            }
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);
        }
        
      
    
    }
    

         excel操作:

    package e2w;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFFont;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    /**
     * 可以从http://poi.apache.org/ 这里下载到POI的jar�?POI 创建和读�?003-2007版本Excel文件
     * 
     */
    
    public class CreatAndReadExcel {
    
    	public static void main(String[] args) throws Exception {
    
    		// creat2003Excel();// 创建2007版Excel文件
    		// creat2007Excel();// 创建2003版Excel文件
    		// 读取2003Excel文件
    		String path2003 = System.getProperty("user.dir")
    				+ System.getProperty("file.separator") + "style_2003.xls";// 获取项目文件路径
    																			// +2003版文件名
    		System.out.println("路径:" + path2003);
    		File f2003 = new File(path2003);
    		try {
    			readExcel(f2003);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		// //读取2007Excel文件
    		// String path2007 = System.getProperty("user.dir")
    		// + System.getProperty("file.separator") + "style_2007.xlsx";//
    		// 获取项目文件路径+2007版文件名
    		// // System.out.println("路径�? + path2007);
    		// File f2007 = new File(path2007);
    		// try {
    		// readExcel(f2007);
    		// } catch (IOException e) {
    		// // TODO Auto-generated catch block
    		// e.printStackTrace();
    		// }
    
    	}
    
    	/**
    	 * 创建2007版Excel文件
    	 * 
    	 * @throws FileNotFoundException
    	 * @throws IOException
    	 */
    	private static void creat2007Excel() throws FileNotFoundException,
    			IOException {
    		// HSSFWorkbook workBook = new HSSFWorkbook();// 创建 �?��excel文档对象
    		XSSFWorkbook workBook = new XSSFWorkbook();
    		XSSFSheet sheet = workBook.createSheet();// 创建�?��工作薄对�?
    
    		sheet.setColumnWidth(0, 10000);// 设置第二列的宽度�?
    
    		XSSFRow row = sheet.createRow(1);// 创建�?��行对�?
    
    		row.setHeightInPoints(23);// 设置行高23像素
    
    		XSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
    
    		// 设置字体
    
    		XSSFFont font = workBook.createFont();// 创建字体对象
    
    		font.setFontHeightInPoints((short) 15);// 设置字体大小
    
    		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
    
    		font.setFontName("黑体");// 设置为黑体字
    
    		style.setFont(font);// 将字体加入到样式对象
    
    		// 设置对齐方式
    
    		style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
    
    		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
    
    		// 设置边框
    
    		style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线
    
    		style.setTopBorderColor(HSSFColor.RED.index);// 设置为红�?
    
    		style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线
    
    		style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框
    
    		style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框
    
    		// 格式化日�?
    
    		style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
    
    		XSSFCell cell = row.createCell(1);// 创建单元�?
    
    		cell.setCellValue(new Date());// 写入当前日期
    
    		cell.setCellStyle(style);// 应用样式对象
    
    		// 文件输出�?
    
    		FileOutputStream os = new FileOutputStream("style_2007.xlsx");
    
    		workBook.write(os);// 将文档对象写入文件输出流
    
    		os.close();// 关闭文件输出�?
    		System.out.println("创建成功 office 2007 excel");
    	}
    
    	/**
    	 * 创建2003版本的Excel文件
    	 */
    	public static void creat2003Excel(String path)
    			throws FileNotFoundException, IOException {
    		HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象
    
    		HSSFSheet sheet = workBook.createSheet();// 创建 一个工作薄对象?
    
    		sheet.setColumnWidth(0, 3000);// 设置第1列的宽度
    		sheet.setColumnWidth(1, 5000);// 设置第2列的宽度
    		sheet.setColumnWidth(2, 3000);// 设置第3列的宽度
    		// HSSFRow row = sheet.createRow(1);// 创建一个行对象
    
    		// row.setHeightInPoints(23);// 设置行高23像素
    
    		// HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
    
    		// 设置字体
    
    		// HSSFFont font = workBook.createFont();// 创建字体对象
    
    		// font.setFontHeightInPoints((short) 15);// 设置字体大小
    
    		// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
    
    		// font.setFontName("黑体");// 设置为黑体字
    
    		// style.setFont(font);// 将字体加入到样式对象
    
    		// 设置对齐方式
    
    		// style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
    		//
    		// style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
    
    		// 设置边框
    
    		// style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线
    		//
    		// style.setTopBorderColor(HSSFColor.RED.index);// 设置为红�?
    		//
    		// style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线
    		//
    		// style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框
    		//
    		// style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框
    
    		// 格式化日�?
    
    		// style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
    		//
    		// HSSFCell cell = row.createCell(1);// 创建单元�?
    
    		// cell.setCellValue(new Date());// 写入当前日期
    
    		// cell.setCellStyle(style);// 应用样式对象
    
    		// 文件输出�?
    
    		FileOutputStream os = new FileOutputStream(path);
    
    		workBook.write(os);// 将文档对象写入文件输出流
    
    		os.close();// 关闭文件输出�?
    		// System.out.println("创建成功 office 2003 excel");
    	}
    
    	/**
    	 * 对外提供读取excel 的方�?
    	 */
    	public static List<List<Object>> readExcel(File file) throws IOException {
    		String fileName = file.getName();
    		String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
    				.substring(fileName.lastIndexOf(".") + 1);
    		if ("xls".equals(extension)) {
    			return read2003Excel(file);
    		} /*
    		 * else if ("xlsx".equals(extension)) { return read2007Excel(file); }
    		 */else {
    			throw new IOException("不支持的文件类型");
    		}
    	}
    
    	/**
    	 * 读取 office 2003 excel
    	 * 
    	 * @throws IOException
    	 * @throws FileNotFoundException
    	 */
    	private static List<List<Object>> read2003Excel(File file)
    			throws IOException {
    		List<List<Object>> list = new LinkedList<List<Object>>();
    		HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
    		HSSFSheet sheet = hwb.getSheetAt(0);
    		Object value = null;
    		HSSFRow row = null;
    		HSSFCell cell = null;
    		System.out.println("读取office 2003 excel内容如下: ");
    		for (int i = sheet.getFirstRowNum(); i <= sheet
    				.getPhysicalNumberOfRows(); i++) {
    			row = sheet.getRow(i);
    			if (row == null) {
    				continue;
    			}
    			List<Object> linked = new LinkedList<Object>();
    			for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
    				cell = row.getCell(j);
    				if (cell == null) {
    					continue;
    				}
    				DecimalFormat df = new DecimalFormat("0");// 格式�?number String
    				// 字符
    				SimpleDateFormat sdf = new SimpleDateFormat(
    						"yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
    				DecimalFormat nf = new DecimalFormat("0.00");// 格式化数�?
    				switch (cell.getCellType()) {
    				case XSSFCell.CELL_TYPE_STRING:
    					// System.out.println(i + "�? + j + " �?is String type");
    					value = cell.getStringCellValue();
    					System.out.print("  " + value + "  ");
    					break;
    				case XSSFCell.CELL_TYPE_NUMERIC:
    					// System.out.println(i + "�? + j
    					// + " �?is Number type ; DateFormt:"
    					// + cell.getCellStyle().getDataFormatString());
    					if ("@".equals(cell.getCellStyle().getDataFormatString())) {
    						value = df.format(cell.getNumericCellValue());
    
    					} else if ("General".equals(cell.getCellStyle()
    							.getDataFormatString())) {
    						value = nf.format(cell.getNumericCellValue());
    					} else {
    						value = sdf.format(HSSFDateUtil.getJavaDate(cell
    								.getNumericCellValue()));
    					}
    					System.out.print("  " + value + "  ");
    					break;
    				case XSSFCell.CELL_TYPE_BOOLEAN:
    					// System.out.println(i + "�? + j + " �?is Boolean type");
    					value = cell.getBooleanCellValue();
    					System.out.print("  " + value + "  ");
    					break;
    				case XSSFCell.CELL_TYPE_BLANK:
    					// System.out.println(i + "�? + j + " �?is Blank type");
    					value = "";
    					System.out.print("  " + value + "  ");
    					break;
    				default:
    					// System.out.println(i + "�? + j + " �?is default type");
    					value = cell.toString();
    					System.out.print("  " + value + "  ");
    				}
    
    				/**
    				 * 当一行中的某单元格是空着(不是打了空格)的时候,同样加入到list中,用标题行的列数控制读取的单元格数 
    				 * 2019年3月18日
    				 * 
    				 */
    				// if (value == null || "".equals(value)) {
    				// continue;
    				// }
    				linked.add(value);
    
    			}
    			System.out.println("");
    			list.add(linked);
    		}
    
    		return list;
    	}
    
    	/**
    	 * 读取Office 2007 excel
    	 */
    
    	/*
    	 * private static List<List<Object>> read2007Excel(File file) throws
    	 * IOException {
    	 * 
    	 * List<List<Object>> list = new LinkedList<List<Object>>(); // String path
    	 * = System.getProperty("user.dir") + //
    	 * System.getProperty("file.separator")+"dd.xlsx"; //
    	 * System.out.println("路径�?+path); // 构�? XSSFWorkbook 对象,strPath 传入文件路径
    	 * XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
    	 * 
    	 * // 读取第一章表格内�? XSSFSheet sheet = xwb.getSheetAt(0); Object value = null;
    	 * XSSFRow row = null; XSSFCell cell = null; System.out.println("读取office
    	 * 2007 excel内容如下�?); for (int i = sheet.getFirstRowNum(); i <= sheet
    	 * .getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row ==
    	 * null) { continue; } List<Object> linked = new LinkedList<Object>(); for
    	 * (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { cell =
    	 * row.getCell(j); if (cell == null) { continue; } DecimalFormat df = new
    	 * DecimalFormat("0");// 格式�?number String // 字符 SimpleDateFormat sdf = new
    	 * SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串 DecimalFormat nf =
    	 * new DecimalFormat("0.00");// 格式化数�?
    	 * 
    	 * switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: //
    	 * System.out.println(i + "�? + j + " �?is String type"); value =
    	 * cell.getStringCellValue(); System.out.print("  " + value + "  "); break;
    	 * case XSSFCell.CELL_TYPE_NUMERIC: // System.out.println(i + "�? + j // +
    	 * " �?is Number type ; DateFormt:" // +
    	 * cell.getCellStyle().getDataFormatString()); if
    	 * ("@".equals(cell.getCellStyle().getDataFormatString())) { value =
    	 * df.format(cell.getNumericCellValue());
    	 * 
    	 * } else if ("General".equals(cell.getCellStyle() .getDataFormatString()))
    	 * { value = nf.format(cell.getNumericCellValue()); } else { value =
    	 * sdf.format(HSSFDateUtil.getJavaDate(cell .getNumericCellValue())); }
    	 * System.out.print("  " + value + "  "); break; case
    	 * XSSFCell.CELL_TYPE_BOOLEAN: // System.out.println(i + "�? + j + " �?is
    	 * Boolean type"); value = cell.getBooleanCellValue(); System.out.print("  "
    	 * + value + "  "); break; case XSSFCell.CELL_TYPE_BLANK: //
    	 * System.out.println(i + "�? + j + " �?is Blank type"); value = ""; //
    	 * System.out.println(value); break; default: // System.out.println(i +
    	 * "�? + j + " �?is default type"); value = cell.toString();
    	 * System.out.print("  " + value + "  "); } if (value == null ||
    	 * "".equals(value)) { continue; } linked.add(value); }
    	 * System.out.println(""); list.add(linked); } return list; }
    	 */
    }
    

    word操作:

    package e2w;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.net.URLEncoder;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    public class WordUtils {
    	// 配置信息,代码本身写的还是很可读的,就不过多注解了
    	private static Configuration configuration = null;
    	// 这里注意的是利用WordUtils的类加载器动态获得模板文件的位置
    	private static final String templateFolder = WordUtils.class
    			.getClassLoader().getResource("").getPath()
    			+ "templates/";
    	// private static final String templateFolder =
    	// "D:\\java_old\\workspace\\excel2Word\\bin\\templates";
    	static {
    		configuration = new Configuration();
    		configuration.setDefaultEncoding("utf-8");
    		try {
    
    			configuration.setDirectoryForTemplateLoading(new File(
    					templateFolder));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	private WordUtils() {
    		throw new AssertionError();
    	}
    
    	// public static void exportMillCertificateWord(HttpServletRequest request,
    	// HttpServletResponse response, Map map,String title,String ftlFile) throws
    	// IOException {
    	// Template freemarkerTemplate = configuration.getTemplate(ftlFile);
    	// File file = null;
    	// InputStream fin = null;
    	// ServletOutputStream out = null;
    	// try {
    	// // 调用工具类的createDoc方法生成Word文档
    	// file = createDoc(map,freemarkerTemplate);
    	// fin = new FileInputStream(file);
    	//
    	// response.setCharacterEncoding("utf-8");
    	// response.setContentType("application/msword");
    	// // 设置浏览器以下载的方式处理该文件名
    	// String fileName = title+DateUtil.formatDateDetailTime(new Date()) +
    	// ".doc";
    	// response.setHeader("Content-Disposition", "attachment;filename="
    	// .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
    	//
    	// out = response.getOutputStream();
    	// byte[] buffer = new byte[512]; // 缓冲区
    	// int bytesToRead = -1;
    	// // 通过循环将读入的Word文件的内容输出到浏览器中
    	// while((bytesToRead = fin.read(buffer)) != -1) {
    	// out.write(buffer, 0, bytesToRead);
    	// }
    	// } finally {
    	// if(fin != null) fin.close();
    	// if(out != null) out.close();
    	// if(file != null) file.delete(); // 删除临时文件
    	// }
    	// }
    
    	private static File createDoc(Map<?, ?> dataMap, String title,
    			Template template) {
    		String fileName = title + ".docx";
    		File f = new File(fileName);
    		Template t = template;
    		try {
    			// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
    			Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
    			t.process(dataMap, w);
    			w.close();
    		} catch (Exception ex) {
    			ex.printStackTrace();
    			throw new RuntimeException(ex);
    		}
    		return f;
    	}
    
    	public static void exportWord(Map<?, ?> map, String title, String ftlFile)
    			throws IOException {
    		System.out.println("-------------------- " + templateFolder);
    		Template freemarkerTemplate = configuration.getTemplate(ftlFile);
    		// 调用工具类的createDoc方法生成Word文档
    		File file = createDoc(map, title, freemarkerTemplate);
    
    	}
    
    }

    word合并:

    package e2w;
    
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.InputStream;  
    import java.io.OutputStream;  
    import java.util.HashMap;  
    import java.util.List;  
    import java.util.Map;  
    
    import org.apache.poi.openxml4j.opc.OPCPackage;  
    import org.apache.poi.xwpf.usermodel.Document;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;  
    import org.apache.poi.xwpf.usermodel.XWPFPictureData;
    import org.apache.xmlbeans.XmlOptions;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
    
    /**
       * @author: Max
       *   
       * @Date: 2018/6/8
       *   
       * @name: 多个word文件合并,采用poi实现,兼容图片的迁移
       * 
       * @Description:
       */ 
    public class MergeDoc {
          	
            public static void main (String[] args) throws Exception {  
                InputStream in1 = null;
                InputStream in2 = null;
                InputStream in3 = null;
                OPCPackage src1Package = null;
                OPCPackage src2Package = null;
                OPCPackage src3Package = null;
                OutputStream dest = new FileOutputStream("C:/Users/15730/Desktop/excel2word/merge123.docx");  
                try {
                    in1 = new FileInputStream("C:/Users/15730/Desktop/excel2word/M1-0001.docx");  
                    in2 = new FileInputStream("C:/Users/15730/Desktop/excel2word/M1-0002.docx");  
                    in3 = new FileInputStream("C:/Users/15730/Desktop/excel2word/M1-0003.docx");  
                    src1Package = OPCPackage.open(in1);
                    src2Package = OPCPackage.open(in2);
                    src3Package = OPCPackage.open(in3);
                } catch (Exception e) {
                    e.printStackTrace();
                }  
          
                XWPFDocument src1Document = new XWPFDocument(src1Package);  
                XWPFDocument src2Document = new XWPFDocument(src2Package);  
                XWPFDocument src3Document = new XWPFDocument(src3Package);  
                
                appendBody(src1Document, src2Document);  
                appendBody(src1Document, src3Document);  
          
                src1Document.write(dest); 
          
          
            }  
          
            public static void appendBody(XWPFDocument src, XWPFDocument append) throws Exception {  
                CTBody src1Body = src.getDocument().getBody();  
                CTBody src2Body = append.getDocument().getBody();  
          
                List<XWPFPictureData> allPictures = append.getAllPictures();  
                // 记录图片合并前及合并后的ID  
                Map<String,String> map = new HashMap();  
                for (XWPFPictureData picture : allPictures) {  
                    String before = append.getRelationId(picture);  
                    //将原文档中的图片加入到目标文档中  
                    String after = src.addPictureData(picture.getData(), Document.PICTURE_TYPE_PNG);  
                    map.put(before, after);  
                }  
          
                appendBody(src1Body, src2Body,map);  
          
            }  
          
            private static void appendBody(CTBody src, CTBody append,Map<String,String> map) throws Exception {  
                XmlOptions optionsOuter = new XmlOptions();
                optionsOuter.setSaveOuter();
                String appendString = append.xmlText(optionsOuter);  
    
                String srcString = src.xmlText(); 
                String prefix = srcString.substring(0,srcString.indexOf(">")+1);  
                String mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<"));  
                String sufix = srcString.substring( srcString.lastIndexOf("<") );  
                String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));  
                  
                if (map != null && !map.isEmpty()) {  
                    //对xml字符串中图片ID进行替换  
                    for (Map.Entry<String, String> set : map.entrySet()) {  
                        addPart = addPart.replace(set.getKey(), set.getValue());  
                    }  
                }  
                //将两个文档的xml内容进行拼接  
                CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix);  
          
                src.set(makeBody);  
            }  
        }  

     

    后记:

    在打包程序时,遇到了一些问题,见另外两篇博客:

    1、eclipse导出可运行jar包时,双击没反应,命令行中jar命令运行报错“**.jar中没有主清单属性”或者报错“Error: Invalid or corrup jarfile **.jar。

    2、MANIFEST.MF文件详解

    展开全文
  • 教师机端建立文件夹。此方法利用半个小时就建立好全校3—6年级500余名学生姓名的文件夹。1、相信很多信息技术老师都教导处帮忙,对于“教务员”这个软件比较熟悉。利用“教务员”软件将全校3—6年级各班学生...
  • word的筛选什么地方1.按快捷键Ctrl+A全选文档内容,然后快捷键Ctrl+H打开【查找和替换】窗口。2.鼠标单击【查找内容】文本框,输入“(3.然后点击【替换为】文本框,输入"\1\2" ,单击勾选下面【使用通配符】前的...
  • 我们可能会经常要将一个文件夹中的所有文件都遍历一遍,然后进行修改,下面就介绍用Dir函数实现遍历*.xlsx文件的方法 Dir 函数 返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的...
  • 能够统计一个文件夹在的所有word的总页数。 代码如下: package com.chedb.controller; import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import ...
  • 打开Word文档的方法有几种?rt.急... 求高手速解。有以下两种打开方式。 工具/原料 Word2003 电脑一台 方法/步骤 方法一:双击桌面上Word图标,打开wold文档上方工具栏里点击“文件”点击“打开”。打开窗口中...
  • 使用Python指定文件夹新建一个文本文档(其他类型文件也可) 今天做一个信息查询系统时需要对读入的信息进行保存,自然需要建立文件,于是就网上寻找了很多见文件的方法。我选择了一种操作比较简单的文件处理...
  • 应我家领导要求,开发一个word文档批处理脚本,涉及word文档、excel表格、文件存取、排序与索引、简单GUI等内容,...完整代码、示例文档详见:开发需求:素材为批量word文档集(docx):位于original文件夹中。文件...
  • 工作中,经常会遇到一次性创建多个不同名的Word文档,然而有超过90%的小伙伴还是一个一个手动去创建,例如下图所示。对于一次性创建几个word文档,你可能没有想那么多,一个一个去创建你觉得也不需要太多的时间。...
  • 我们使用电脑办公的时候,常常都使用到Word文档来进行一定的信息编辑会文章的编辑等,一般情况下,只需要所使用的电脑中下载安装一个Office办公软件就可以达到这一目的。但是就前短时间,就有用户向小编咨询,...
  • 先选择要建立文件夹的位置,比如说,我要建立在C:的根目录下面,那么资源管理器的左边点“C:”的盘符的图标,然后,将鼠标移动到右边的空白处,单击鼠标右键,此时出现一个菜单,将鼠标移动到下面...
  • Microsoft Word文件在某些情况下可能会丢失。例如:强制退出、电源中断或没存档就关闭。文章中将介绍几种恢复丢失文件的有效方法,您可以用其中一种方法来尝试找回已删除的Word文件。 方法 1. 从资源回收站中找回 ...
  • import java.io.File; import java.io.IOException;...//编写一个程序,F盘下创建一个“Java学习”的文件夹,并在文件夹中一次性创建200个 //“智递科技Android实训课程之JavaSE培训_视频教程001.wmv”视
  • 应我家领导要求,开发一个word文档批处理脚本,涉及word文档、excel表格、文件存取、排序与索引、简单GUI等内容,...完整代码、示例文档详见:开发需求:素材为批量word文档集(docx):位于original文件夹中。文件...
  • 博主是需要将这三个文件夹里的每一个对应的元素单独提取出来,变成一个文件夹...建立多个文件夹: ** 我的解决思路: ** 批量新建文件 这里参考我的另外一篇博客:https://blog.csdn.net/weixin_43582443/article/de
  • 参考了很多文章,搜集了很多资料整理而成。 好的用途可以用来隐藏个人资料,防止误删,病毒免疫等等。 至于坏的方面,当然也可用来隐藏木马等等,就看你...名称里含有"\"的文件文件夹如何建立和删除。 下面进入正
  • unity创建word文档There may be times when you want to make changes to a document, but not take the chance that the changes become permanent. To avoid affecting the original document, you can create a ...
  • java对txt文件word文档的读写

    千次阅读 2017-12-30 20:11:19
    本篇文章主要是利用java对我们常用的txt文件word文档进行读取和写入操作。
  • 总体思想:扫描文件夹文件,逐个读取追加入word中。 代码: from docx import Document from docx.enum.text import WD_BREAK import os from docx.oxml.ns import qn # 主要用于读取 文件的内容 def getContent...
  • 使用记事本就可以建立“.html”文件。操作如下:首先电脑桌面空白处右键鼠标,新建“文本文档”;新建的文本文档中输入要显示的内容;然后返回桌面,将文本文档的名称和后缀名更改为“index.html”;更改之后...
  • 计算机应用基础 第三章 管理文件文件夹管理文件文件夹 文件文件夹的概念 通过文件文件夹对信息进行组织和管理 1.文件及其特性 文件是存储在外存储器(如磁盘)上的相关信息的集合。这些信息最初是内存中建立...
  • 大学计算机基础实验4-word文档的综合应用 Word 文档的综合应用 (一)表格制作 【实验目的】 1....建立如下图 1 所示的表格,并以 W3.DOC 为文件名(保存类型为“WORD 文档” ) 保存当前文件夹或磁盘...
  • 回答: 使用Word编辑文档的时候,不仅可以保存成Word格式,也可以保存为...这里笔者要告诉大家的是:批量转换文档格式不求“人”,完全可以借助Word本身自带的功能就可以完成批量转换文档格式的工作。为了叙述方便...
  • import os search_word = input(‘请输入要查找的吧名’) 创建文件夹 if not os.path.exists(search_...print(search_word + ‘文件夹已存在’) # 生成文件名 filename = search_word + '_' + str(page) + '.html...
  • 本章将会详细的介绍MATLAB的文件夹管理和常用的文件I/0操作。文件I/0操作是本章的重点,首先介绍了低级...MATLAB中,提供了很多文件夹操作的命令,可以MATLAB的命令行窗口列出当前的文件夹、显示文件文件夹、以及
  • 最近做学校的srt,需要数据清洗,清洗后的word里面有6张表格,为了判断word里面是否都有6张表格,写了段python代码来判断。   能实现批量读取某个文件夹内的所有docx文件,然后计算docx里的表格数量。   ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,108
精华内容 12,843
关键字:

如何在文件夹建立word文件