用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 ...
随机推荐
- 1 Java程序文件中函数起始行和终止行在程序文件位置中的判定__抽象语法树方法
应用需求: 实现对BigCloneBench中函数体的克隆检测,必须标注出起始行号和终止行号. 问题: 给定一个Java文件,从中提取出每个函数的起始行和终止行. 难点: 这个问题的难点在于,对于Ja ...
- Ubuntu 16.04 c++ Google框架单元测试
环境:Ubuntu 16.04 在github网站上下载gtest框架:终端输入git clone https://github.com/google/googletest.git 然后找到 gool ...
- Android组件系列----当前Activity跳转到另一个Activity的详细过程
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- 5.FileWriter 和 BufferWriter
FileWriter 和 BufferWriter的使用场景 IO这块,各种Writer,Reader,让人眼晕 而在网上基本找不到在什么时候用哪个类,并且网上的IO demo 很多用法都是错的 在 ...
- win7 下安装oracle 10 g
首先下对版本,Oracle 10g支持Win7版: http://download.oracle.com/otn/nt/oracle10g/10203/10203_vista_w2k8_x86_pro ...
- iOS设计模式 - 迭代器
iOS设计模式 - 迭代器 原理图 说明 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 源码 https://github.com/YouXianMing/iOS-Des ...
- nodepad++添加新主题
https://www.cnblogs.com/d0main/p/6915460.html
- HDFS NameNode内存全景
一.概述 从整个HDFS系统架构上看,NameNode是其中最重要.最复杂也是最容易出现问题的地方,而且一旦NameNode出现故障,整个Hadoop集群就将处于不可服务的状态,同时随着数据规模和集群 ...
- THE CUP OF LIFE即生命之杯。
生命之杯 编辑 THE CUP OF LIFE即生命之杯. <生命之杯>(西班牙语:La copa de la vida,英语:The Cup of Life)是一首由波多黎各裔歌手瑞奇· ...
- SDN2017 第一次作业
作业链接 阅读LearningNetworkProgramming.pdf,思考后回答以下问题: 你会选择作 网络编程 方向的程序员吗?为什么? 请搜寻并列出至少3个有影响力的中英文SDN的门户网站. ...