用EXCEL的VBA将PHPCMS的备份文件转换成HTML的一次尝试
背景
有个PHPCMS的网站停了,但是网站的历史文章又想要看看,网站停了以后,管理员发来了网站的所有数据。
分析
因为不会PHP,所有本地环境跑网站不优先考虑。
有MySQL数据库文件,但是不熟悉MySQL数据库,也就不下载数据库了。
有PHPCMS导出的SQL文件,但是不是标准的SQL文件,不能用于导入数据库。不过这个文本格式的文件已经包含了所有文章的内容。
尝试
1.将v9_news 文章主表,v9_news_data 文章从表 用 vlook 函数拼接了一个 “news full”表。
2.用邮件合并的方式,直接生成了2000页的DOC 文档。
3.但是文章的附件图片未能显示……
行动
1.将几个SQL 合并成一个文件。(导出文件是按照2MB进行了分割)
2.下载了 PHPCMS的数据字典。
3. 用到的表有: v9_news 文章主表,v9_news_data 文章从表,v9_attachment 附件表, v9_attachment_index 附件关系表
4.将这几个表的插入语句用 VSCODE处理成 csv格式,导入EXCEL。
5.mysql 数据库的时间转换到 excel的时间,用公式 =(Q2+8*3600)/86400+70*365+19,再用函数拼接成字符串格式。
6.用 VBA 将记录读取到txt文件中。
Private Sub CommandButton1_Click()
Dim fso As Object, sFile As Object
Const ForReading = , ForWriting = , ForAppending = , TristateFalse =
Set fso = CreateObject("Scripting.FileSystemObject")
Set sFile = fso.OpenTextFile("d:\testfile.txt", ForAppending, TristateFalse)
For c = To sFile.WriteLine "<div><h3>" + Sheet1.Cells(c, "d").Value + "</h3>"
sFile.WriteLine "<h5>日期:" + Sheet1.Cells(c, "w").Value + "</h5>"
For ccccc = To
wenzhangID = Sheet2.Cells(ccccc, "a")
If wenzhangID = Sheet1.Cells(c, "a") Then
NewsData = Sheet2.Cells(ccccc, "b").Value
sFile.WriteLine "<div>" & NewsData & "</div>"
End If
Next
'sFile.WriteLine "<div>" + getNewsData(Sheet1.Cells(c, "a")) + "</div>" Dim keyArray() As Single
Dim i As Single '数组计数
i =
For cc = To
aid = Sheet4.Cells(cc, "c")
If aid = Sheet1.Cells(c, "a") Then
ReDim keyArray(i + )
keyArray(i) = Sheet4.Cells(cc, "d")
i = i +
End If Next
If i > Then
For Each aaa In keyArray ' MsgBox aaa For ccc = To ID = Sheet3.Cells(ccc, "a")
If ID = aaa Then
'MsgBox Sheet3.Cells(ccc, "e").Value sFile.WriteLine "<img width=""100%"" src=uploadfile/" + Sheet3.Cells(ccc, "e").Value + " />"
End If Next Next End If sFile.WriteLine "</div>" Next sFile.Close
Set fso = Nothing
Set sFile = Nothing
MsgBox "OKOK!!!" End Sub
遇到的问题
1. VBA 不熟悉,基本上都是粘贴复制。做了几个函数调用,总是有这样那样的问题,调用不成功,后来只好来个嵌套大法,层层嵌套了。
Function getNewsData(m) For ccccc = To
wenzhangID = Sheet2.Cells(ccccc, "a")
If wenzhangID = m Then
getNewsData = Sheet2.Cells(ccccc, "b").Value
End If Next End Function Function getKey(m)
'm是文章id
Dim keyArray() As Single
Dim i As Single '数组计数
i =
For c = To
aid = Sheet4.Cells(c, "c")
If aid = m Then
ReDim keyArray(i + )
keyArray(i) = Sheet4.Cells(c, "d")
i = i +
End If Next
ReDim keyArray(i + )
getKey = keyArray
End Function Function EmptyArr(ByRef x() As String) As Boolean '判断是否为空数组的自定义函数
Dim tempStr As String
tempStr = Join(x, ",")
EmptyArr = LenB(tempStr) <=
End Function
几个不成功的函数
2.如果单元格里面有连续四个空格的话,FileSystemObject.WriteLine 会报错,不明白为什么。
3.还有两个单元格看起来没有什么特别的内容,FileSystemObject.WriteLine 也会报错,原因不明,也不知道该怎样分析,最后把单元格内容设定为“读取错误”给跳过了。
4.变量名,格式啥的非常随意,估计过几天自己也不认得了。
5.认为这样简单的任务用 VBA 搞定应该很宽,但是没想到在做循环的时候,竟然在怎样判断数组的元素个数上搜了半天。
想法:
下次这样的任务还是用 NOPI 做。
用EXCEL的VBA将PHPCMS的备份文件转换成HTML的一次尝试的更多相关文章
- EXCEL中讲 10分10秒转换成610秒
前几天宝贝跟我打赌100W说我20天给她打电话不到10小时,我说绝对超过10小时了,但是由于宝贝的赖皮死活不承认,所以我被迫掉出通话记录,拿到通话记录我有点小郁闷,因为通话记录里的时间格式00分00秒 ...
- 如何把Excel中的某列数值如何转换成文本格式,且兼容性最好?
假设要把下方A列数值变成文本格式.有多种方法,其中下方的方法兼容性最好: 第一步:选择 A 列,然后,运行菜单 数据/分列... 命令,如下图: 第二步:默认 下一步: 第三步:默认 下一步: 第四步 ...
- Excel 中将大于511的十进制数转换成二进制
If number < -512 or if number > 511, DEC2BIN returns the #NUM! error value. 所以不能直接使用DEC2BIN函数. ...
- 使用VBA批量转换Excel格式,由.xls转换成.xlsx
问题分析: Excel2007以前的格式是.xls,之后的格式是.xlsx.打开单独的一个Excel文档,使用“另存为”功能,可以很轻松的转换格式.但是面对几百个Excel表这样就太累了,搜索很久,也 ...
- 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL
原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...
- EXCEL的VBA(宏)编程
EXCEL的VBA编程 杨康需要我完成的需求 第一列是名称 第二列是甲方账户 第三列是甲方金额 第四列是乙方账户 第五列是乙方金额 第六列是true或false 第七列备注 需求 开始时数据对齐的,如 ...
- excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表
在网上找EXCEL多文件合并的方法,思路: 一.Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转 ...
- VBA 把电信的电话费用表转换成部门电话费用明细表(图文)
今天同事要做一个这种工作.就是把电信发来的费用表,转换成按部门划分的电话费用表,100多部电话,假设一个个去核对,真还是须要些时间的.问题来了,有更好的方法么,我们来看一下. 电信公司给的费用明细是这 ...
- Java中Office(word/ppt/excel)转换成HTML实现
运行条件:JDK + jacob.jar + jacob.dll 1) 把jacob.dll在 JAVA_HOME\bin\ 和 JAVA_HOME\jre\bin\ 以及C:\WINDOWS\sys ...
随机推荐
- 用Use Case获取需求的方法是否有缺陷,还有哪些地方需要改进
(提示:是否对所有应用领域都适用?使用的方便性?......) Use Case使用原则: 1.通过讲简单的故事来传递消息 讲故事是最有效的人与人交流信息的途径.通过讲故事(Use Case),团队成 ...
- js判断状态
'<input type="radio" class="danxuan" name="danxuan" code="'||v ...
- Oracle 18c新特性一览
1. 一般新特性 1.1. Shadow Lost Write Protection Shadow lost write protection检测到一个丢失的写,它会导致一个主要的数据损坏.可以在不需 ...
- 使用截图工具FastStone Capture
使用截图工具FastStone Capture -谨以此教程献给某位上进的测试人员- FastStone Capture是本人用过的windows平台上最好用的截图工具,界面简洁,功能强大,还支持屏幕 ...
- 剑指offer 09变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. java版本: public class Solution { public stati ...
- (1)封装 (2)static关键字 (3)继承
1.封装(重中之重)1.1 基本概念 通常情况下,可以在测试类中给成员变量进行赋值,当给定的数值合法但不合理时,无论是编译还是运行阶段都不会报错或给出提示,此时与现实生活不符. 为了避免上述问题的发生 ...
- Windows10自动更新之后,无线有线都连不上网
大概浪费了我至少6个小时. 一个是无线网卡,这个后来可以修复,其实也不是网卡的原因.最主要的原因是 Realtek PCIe GBE Family Controller 这个驱动.只找到一个win1 ...
- Maven实战(八)pom.xml简介
目录 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件.开发者需要遵循的规则.缺陷管理系统.组织和licenses.项目的url.项目的依赖 ...
- 如何运行vue项目(从gethub上download的开源项目)
前提:入坑vue.js,从GitHub上download一个vue.js的开源项目,发现不知如何在浏览器运行,通过查阅网上教程,发现网上的很多是教你怎么新建项目,并没有一个是教如何打开已有的项目.自已 ...
- 在windows下的虚拟环境中使用tk,要留神了
事情是这样的:有朋友在学习用matplotlib作图,遇到一些问题问我,我也没用过,就想先装一个试试.然后呢,我就随手创建了个虚拟环境.结果,涉及到matplotlib的第一行就报错了: Traceb ...