背景

有个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. Mongodb的入门(1)window安装mongodb

    mongodb: Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数 ...

  2. 【日常记录】【unity3d】 获取手柄轴的输入

    参考 https://blogs.msdn.microsoft.com/nathalievangelist/2014/12/16/joystick-input-in-unity-using-xbox3 ...

  3. WEBserver 性能测试

    本地实验(Centos7),WEBserver性能测试; 软件包地址 wget http://download.joedog.org/siege/siege-4.0.2.tar.gztar -xf s ...

  4. Prometheus Node_exporter 之 Basic Net / Disk Info

    1. Network Traffic Basic 每个接口的基本网络信息 type: GraphUnit: bytesrecv {{device}} 各个网络接口的下载量 recv lo: 本地环回接 ...

  5. 单独配置 Ehcache

    package com.shy.ehcache; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net ...

  6. linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘

    linux或者OS X系统中,使用“dd”命令可以直接在终端命令行模式下,制作ISO镜像的系统安装盘. 一.linux系统以centOS7为例. sudo dd if=镜像路径 of=USB设备路径 ...

  7. 用Spider引擎解决数据库垂直和水平拆分的问题

    作者介绍 张秀云,网名飞鸿无痕,现任职于腾讯,负责腾讯金融数据库的运维和优化工作.2007年开始从事运维方面的工作,经历过网络管理员.Linux运维工程师.DBA.分布式存储运维等多个IT职位.对Li ...

  8. Python学习---Python的异步IO[all]

    1.1.1. 前期环境准备和基础知识 安装: pip3 install aiohttp pip3 install grequests pip3 install wheel pip3 install s ...

  9. Hadoop HBase概念学习系列之HBase里的时间戳(二十六)

    HBase集群要求每个节点的时间必须同步.HBase对于节点的时间扭曲(time skew)容忍度很低(这和HDFS是不一样的). 这主要是因为HBase需要使用系统时间来产生时间戳.如果系统时间不同 ...

  10. Oracle SQL Developer官方工具 初探

    查询表数据(打开工作表:Alt+F10) 运行SQL语句:(格式化:Ctrl+F7) 自动完成语句的设置 自动弹出的速度加快,并且将命中率提高,进行如下设置: 由于我的输入法占用了CTRL+,的快捷建 ...