欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java导出excel_如何导出你和女票的微信聊天记录

发布时间:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java导出excel_如何导出你和女票的微信聊天记录 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

正文共:2497 字 16 图

预计阅读时间:7 分钟

前言

    Sun和Star已经在一起将近两年了。

    从两年前的夏天高考结束两个人加了微信,到现在,已经产生了不计其数的聊天记录.......

    就在某一天,当Star打算看一看之前的聊天记录而因为聊天记录太多微信崩溃的时候,他觉得,是时候把微信聊天记录导出到电脑上了。

    更何况,这样相当于有了一个备份,降低了这么多珍贵的聊天记录丢失的风险~

    经过观察,Star发现,不像QQ一样可以方便的在应用内直接导出,微信的聊天记录是无法导出成一些方便可视化查看的格式的。目前支持的功能,似乎只有在不同设备之间同步聊天记录:

    于是Star开始Google相关信息,发现在网上的大部分攻略都是针对IOS的......即使有针对安卓手机的教程,它们的年代都相对久远,看起来不太靠谱。

    最终,Star定位了两篇相对有用的攻略(链接放在文末)。最终目标是,把聊天记录导出到excel中,其中包含消息发送时间,发送人以及聊天具体文字内容。

1.提取原始数据库

一般来讲,在使用安卓文件系统的手机里(Star的手机是小米),微信聊天记录应当存储在:

根目录/data/data/com.tencent.mm/MicroMsg

之中,如下图:

一般加密的数据库文件在两个长名字文件夹之一,需要自己寻找,于是Star查看了一下两个文件夹的大小:

    显然聊天记录在后面的文件夹里......打开文件夹,会找到EnMicroMsg.db这个文件,这是一个数据库文件,但是它没法直接打开,因为它是加密的。

2.获取数据库密码

    那么怎么得到密码呢?目前各种资料得出的密码获取方式是 的MD5码前七位。也就是上图中提到的第一种方法。

    我们可以手动去寻找这些信息来得到密码,简单来讲就是:

    手机IMEI号:拨号界面输入*#06#即可,(双卡双待手机两个串号,需要自行尝试)

    微信UIN号:这个号存储在如下文件中:

/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml

打开文件,找到:

value的值就是微信的UIN号。

    但是!Star在Github上找到了现成的java代码(连接在文末,需要相应环境才能运行)。

    将CompatibleInfo.cfg和systemInfo.cfg以及EnMicroMsg.db复制出来,然后和IMEI.java放到同一目录下,运行代码即可得到密码:

3.打开并导出

    输入密码,打开数据库(可以使用sqlcipher):

    这个软件支持直接导出csv格式,File-Export-Table as CSV file,找到message导出即可:

4.处理数据

    到了这一步,Star本以为大功告成,但实际上还远远没有QAQ。

    最主要的两个问题:

    1.目前导出的数据是微信中的全部聊天记录,而不仅仅是Sun和Star的聊天记录。

    2.现在这个文件太大了,里面有很多我们不需要的信息,需要进一步处理。

    既然都导出csv文件了,那直接用excel处理不就好了?确实,Star一开始也是这么想的......然鹅,在打开这么大的一个文件的过程中,Star的电脑死机了......

    好吧,既然先打开浏览不可取,那就只能直接处理了,Star首先在攻略中看到了网上其他人打开这个csv文件后总结出的数据存储规律:

    如图可以看到,我们主要关注的是四个信息:

    1.isSend:0则为对方发的消息,1是自己发的消息

    2.createTime:10位UNIX时间戳,可以算法转换为标准时间

    3.talker:这个是关键,你与某个联系人的对话就为一个taker id,锁定了它就锁定了你与她的所有对话

    4.content:聊天文字内容

    好,那么我们的思路就很清晰了,只要找到对应的talker值,然后提取出来,然后再提取对应的四列数据就可以了!

    实际操作中,可以用matlab或者python的pandas、csv库来实现对数据的直接处理。

    但是!Star在知乎上找到了一个读数据神器——EmEditor!(emeditor.com)Emeditor具有专门针对大文件的优化,内置了大文件控制器,用它打开这个将近200MB的csv文件只需要几秒钟!

    Star热泪盈眶地打开了message文件,一眼就看到了他和Sun的第一段聊天记录。

    那么现在的显示方式是纯文本显示,我们可以按照逗号分隔来显示表格(在上方工具栏“CSV/排序”中):

    现在已经一目了然了,Emeditor内置了查找提取等操作,于是把“talker”对应的值为你想要的联系人的行全部提取出来,导出到一个新的csv文件中,就可以啦!

    导出之后的文件果然小多了,可以成功地用excel打开:

    接下来,Star发现,时间显示格式还是UNIX时间戳,非常不方便。还有,在聊天记录中其实有很多内容是没用的(比如红包、表情包、图片,在数据库里都是按一串链接的格式存储的)。

    要做的事情:把UNIX时间戳转换成北京时间;把聊天记录“content”一栏中真正包含文字的行提取出来。

    转换时间:对应excel公式(B为存储时间的栏):

=(B+8*3600)/86400+70*365+19

转换之后,再调整单元格日期显示格式为日期加时间就可以了。

    提取文字:对应excel条件(D为存储内容的栏):

LENB(D)>LEN(D)

LENB对单元格内容计数时,会把汉字当成2字节来算,而LEN计数时,无论什么字符都按1字节来算。如果LENB的值大于LEN的值,就代表单元格内含有汉字。

    最后:导出效果是这样的:

    基本已经成功了!接下来就可以对聊天记录一通分析了hhhh......比如统计什么词出现次数最多啊之类的。甚至还可以制作一个年度总结~

相关攻略:

https://zhuanlan.zhihu.com/p/28935173

https://github.com/Heyxk/notes

Excel时间戳转换:

https://blog.csdn.net/u013347671/article/details/78062601

总结

以上是生活随笔为你收集整理的java导出excel_如何导出你和女票的微信聊天记录的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。