背景

有个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的一次尝试的更多相关文章

  1. EXCEL中讲 10分10秒转换成610秒

    前几天宝贝跟我打赌100W说我20天给她打电话不到10小时,我说绝对超过10小时了,但是由于宝贝的赖皮死活不承认,所以我被迫掉出通话记录,拿到通话记录我有点小郁闷,因为通话记录里的时间格式00分00秒 ...

  2. 如何把Excel中的某列数值如何转换成文本格式,且兼容性最好?

    假设要把下方A列数值变成文本格式.有多种方法,其中下方的方法兼容性最好: 第一步:选择 A 列,然后,运行菜单 数据/分列... 命令,如下图: 第二步:默认 下一步: 第三步:默认 下一步: 第四步 ...

  3. Excel 中将大于511的十进制数转换成二进制

    If number < -512 or if number > 511, DEC2BIN returns the #NUM! error value. 所以不能直接使用DEC2BIN函数. ...

  4. 使用VBA批量转换Excel格式,由.xls转换成.xlsx

    问题分析: Excel2007以前的格式是.xls,之后的格式是.xlsx.打开单独的一个Excel文档,使用“另存为”功能,可以很轻松的转换格式.但是面对几百个Excel表这样就太累了,搜索很久,也 ...

  5. 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL

    原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...

  6. EXCEL的VBA(宏)编程

    EXCEL的VBA编程 杨康需要我完成的需求 第一列是名称 第二列是甲方账户 第三列是甲方金额 第四列是乙方账户 第五列是乙方金额 第六列是true或false 第七列备注 需求 开始时数据对齐的,如 ...

  7. excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表

    在网上找EXCEL多文件合并的方法,思路: 一.Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转 ...

  8. VBA 把电信的电话费用表转换成部门电话费用明细表(图文)

    今天同事要做一个这种工作.就是把电信发来的费用表,转换成按部门划分的电话费用表,100多部电话,假设一个个去核对,真还是须要些时间的.问题来了,有更好的方法么,我们来看一下. 电信公司给的费用明细是这 ...

  9. 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. leetCode题解之反转二叉树

    1.题目描述 经典的反转二叉树,就是将二叉树中每个节点的左.右儿子交换. 2.题目分析 3.代码 TreeNode* invertTree(TreeNode* root) { if(root == N ...

  2. 7.log4j2的使用

    一.简介 log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量.可配置的审计型日志.基于插件架构的各种灵活配置等.如 ...

  3. 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)

    本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...

  4. 搜索菜单栏侧滑效果控件SearchView

    搜索菜单栏侧滑效果控件SearchView 本人视频教程系类   iOS中CALayer的使用 效果1: 效果2: 项目中用到的图片 bgImg@2x.png: 源码: SearchView.h + ...

  5. [翻译] UIColor-uiGradientsAdditions

    UIColor-uiGradientsAdditions https://github.com/kaiinui/UIColor-uiGradientsAdditions Beautiful color ...

  6. 高可用api接口网络部署方案

    我们平时接触的产品都是7*24小时不间断服务,产品中的api接口肯定也是高可用的,下面我向大家分享一下互联网公司api接口高可用的网络部署方案.  我们一般通过http://le.quwenzhe.c ...

  7. 给 Virtualbox 中 Ubuntu 系统设置静态 IP

    虚拟机网络选择 桥接网卡 模式. 主要涉及两个步骤: 1. 修改 /etc/network/interfaces 文件: 2. 修改 dns : 第一步,修改 interfaces 文件: sudo ...

  8. JVM虚拟机21: 1.8中废弃永久代(PermGen)迎来元空间(Metaspace)

    1.JDK8永久代的废弃 JDK8 永久代变化如下图: 1.新生代:Eden+From Survivor+To Survivor 2.老年代:OldGen 3.永久代(方法区的实现) : PermGe ...

  9. python第十四课--排序及自定义函数之案例二:冒泡排序

    案例二:冒泡排序 lt1=[45,12,56,-32,-3,44,75,-22,100] print('排序前:'+str(lt1)) 自定义函数:实现冒泡排序(升序)原则:1).有没有形参?有,接受 ...

  10. Mybatis 的常见面试题

    背景:好久没用Mybatis了,有些面试题还是要好好准备的. Mybatis 的常见面试题