GetTextAndImageCreateExamPaper
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
'下载网络图片
Sub DownloadImageName(ByVal ImageURL As String, ByVal ImagePath As String)
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, ImageURL, ImagePath, 0, 0)
If lngRetVal = 0 Then
DeleteUrlCacheEntry ImageURL '清除缓存
'MsgBox "成功"
Else
'MsgBox "失败"
End If
End Sub Sub OneKeyCreateExam()
Dim ImgNames As Variant
Dim strText As String
Dim i As Long, n As Long, m As Long
Dim OneTagP As Object
Dim OneTagA As Object
Dim TagP As Object
Dim PosText As String
Dim Arr() As String
ReDim Arr(1 To 1) As String
Dim Brr() As String
ReDim Brr(1 To 1)
Dim ImageURL As String
Dim FilePath As String
Dim FileName As String Dim dContent As Object
Set dContent = CreateObject("Scripting.Dictionary")
Dim dImageName As Object
Set dImageName = CreateObject("Scripting.Dictionary") Dim StartTime As Variant '开始时间
Dim UsedTime As Variant '使用时间
StartTime = VBA.Timer '记录开始时间 AppSettings
On Error GoTo ErrHandler '设置URL,访问网页获取网页源码
URL = ActiveSheet.Range("A2").Text
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
strText = .responsetext
End With '创建网页文件
With CreateObject("htmlfile")
.write strText
'获取标题
FileName = .getElementsByTagName("h2")(0).innerhtml
Debug.Print FileName Application.StatusBar = ">>>>>>正在下载图片>>>>>>" i = 0 '初始化序号 For Each OneTagA In .getElementsByTagName("a") '循环所有A标签
If OneTagA.HasChildNodes Then
If OneTagA.href Like "http://photo.blog.sina.com.cn/showpic.html*" Then '获取之前的一个段落
Set TagP = OneTagA.PreviousSibling
Do While TagP.tagName <> "P"
Set TagP = TagP.PreviousSibling
Loop i = i + 1 '文字内容提取
PosText = TagP.innerhtml
PosText = RegReplace(PosText, "<.*?>")
PosText = Replace(PosText, " ", "") '获取图片URL
ImageURL = OneTagA.FirstChild.getAttribute("real_src")
ImageName = "Image" & i & ".jpg"
ImagePath = ThisWorkbook.Path & Application.PathSeparator & ImageName
DownloadImageName ImageURL, ImagePath '下载图片 '获取图片
If dImageName.Exists(PosText) = False Then
dImageName(PosText) = ImageName
Else
dImageName(PosText) = dImageName(PosText) & "|" & ImageName
End If End If
End If
Next Application.StatusBar = ">>>>>>正在获取文本>>>>>>" i = 0 '初始化序号
n = 0 '初始化序号
For Each OneTagP In .getElementsByTagName("p")
'文字内容提取
PosText = OneTagP.innerhtml
PosText = RegReplace(PosText, "<.*?>")
PosText = Replace(PosText, " ", "") i = i + 1 If PosText = "喜欢" Then Exit For '提前结束循环
If i > 20 Then '开始记录试卷内容
If Len(PosText) > 0 Then '保留非空数组
n = n + 1
ReDim Preserve Arr(1 To n)
Arr(n) = PosText '存入数组
'Debug.Print n; " "; PosText
'dContent(PosText) = n
End If
End If
Next
End With Application.StatusBar = ">>>>>>正在创建Word文档>>>>>>" FilePath = ThisWorkbook.Path & "\" & FileName & ".doc"
On Error Resume Next
Kill FilePath
On Error GoTo 0 Dim wdApp As Object
Dim Doc As Object
Set wdApp = CreateObject("Word.Application")
Set Doc = wdApp.documents.Add() Doc.Activate For i = 1 To UBound(Arr) PosText = Arr(i) wdApp.Selection.TypeText Text:=PosText
wdApp.Selection.TypeParagraph If dImageName.Exists(PosText) Then '如果含有图片
If InStr(dImageName(PosText), "|") = 0 Then '如果只含有一张图片
ImageName = dImageName(PosText)
ImagePath = ThisWorkbook.Path & Application.PathSeparator & ImageName
wdApp.Selection.InlineShapes.AddPicture FileName:=ImagePath, LinkToFile:=False, SaveWithDocument:=True
wdApp.Selection.TypeParagraph
Else
ImgNames = Split(dImageName(PosText), "|")
For n = LBound(ImgNames) To UBound(ImgNames) Step 1
ImageName = ImgNames(n)
ImagePath = ThisWorkbook.Path & Application.PathSeparator & ImageName
wdApp.Selection.InlineShapes.AddPicture FileName:=ImagePath, LinkToFile:=False, SaveWithDocument:=True
wdApp.Selection.TypeParagraph
Next n
End If
End If Next i Doc.SaveAs FilePath
Doc.Close
wdApp.Quit Application.StatusBar = ">>>>>>正在删除Image图片>>>>>>" For Each Key In dImageName.keys
If InStr(dImageName(Key), "|") = 0 Then
ImageName = dImageName(Key)
ImagePath = ThisWorkbook.Path & Application.PathSeparator & ImageName
Kill ImagePath
Else
ImgNames = Split(dImageName(Key), "|")
For n = LBound(ImgNames) To UBound(ImgNames) Step 1
ImageName = ImgNames(n)
ImagePath = ThisWorkbook.Path & Application.PathSeparator & ImageName
Kill ImagePath
Next n
End If
Next Key UsedTime = VBA.Timer - StartTime
MsgBox "本次运行耗时:" & Format(UsedTime, "#0.0000秒") ErrorExit:
Set wdApp = Nothing
Set Doc = Nothing AppSettings False
Exit Sub
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "QQ 84857038"
Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If End Sub
Public Function RegReplace(ByVal OrgText As String, ByVal Pattern As String, Optional RepStr As String = "") As String
'传递参数 :原字符串, 匹配模式 ,替换字符
Dim Regex As Object
Dim newText As String
Set Regex = CreateObject("VBScript.RegExp")
With Regex
.Global = True
.Pattern = Pattern
End With
newText = Regex.Replace(OrgText, RepStr)
RegReplace = newText
Set Regex = Nothing
End Function
Public Sub AppSettings(Optional IsStart As Boolean = True)
If IsStart Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.StatusBar = ">>>>>>>>Macro Is Running>>>>>>>>"
Else
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
End If
End Sub
GetTextAndImageCreateExamPaper的更多相关文章
随机推荐
- Java设计模式应用——工厂模式
工厂模式有三种:简单工厂.工厂方法.抽象工厂 一. 抽象工厂 1. 一个可以生产多种产品的工厂: 2. 不改变工厂无法生产新的产品. package com.coshaho.learn.factory ...
- nginx日志过滤相同IP方法
nginx日志过滤相同IP方法分析nginx日志的时候,统计ip怎么过滤重复的?awk '{print $2}' nginx.log |sort -rn |uniq -c |sort -rn |hea ...
- Linux中Postfix虚拟用户及虚拟域(六)
Postfix基于虚拟用户虚拟域的邮件架构 上图是一个几乎完整的邮件系统架构图,这里基于Mysql数据库进行用户认证,不管是Postfix.Dovecot.webmail都需要去Mysql数据库中进行 ...
- 20145332卢鑫 MSF基础应用
20145332卢鑫 MSF基础应用 实验过程 靶机的IP地址:192.168.10.160 Kali的IP地址:192.168.10.128 1.一个主动攻击 攻击XP系统的漏洞:ms08_067 ...
- 小K(wifi)插座剖解
1.主控 AR9331 400MHZ MIPS 24k内核 2.flash:w9425G6JH-5 1352P 6316CF500ZY RAM 32M
- getContext,getApplicationContext和this有什么区别
使用this, 说明当前类是context的子类,一般是activity application等使用getApplicationContext 取得的是当前app所使用的application,这在 ...
- 使用volley来json解析
我对网络请求get和post的理解: 1.get只是从某网址获得固定数据,如我访问百度,返回就是百度的html语句: 2.post是我在访问的时候加了某些参数,如我访问某个服务器,访问的时候加了一些语 ...
- Linux进程间通信--使用信号量【转】
本文转载自:http://blog.csdn.net/ljianhui/article/details/10243617 这篇文章将讲述别一种进程间通信的机制——信号量.注意请不要把它与之前所说的信号 ...
- Java filter中的chain.doFilter详解
转载: 一.chain.doFilter作用 1.一般filter都是一个链,web.xml 里面配置了几个就有几个.一个一个的连在一起 request -> filter1 -> fil ...
- Netty原理剖析
1. Netty简介 Netty是一个高性能.异步事件驱动的NIO框架,基于JAVA NIO提供的API实现.它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作 ...