阅读视图

发现新文章,点击刷新页面。

office系的SQL为啥不能文本拼接?!

当年今日

花了几乎一天的时间去研究什么把Access VBA里的自定义函数移植到Excel的VBA里面。大家都是VBA,大家都是 office家庭的,听上去好像没什么难度,但实际上前人已经碰壁阵亡,确定这是不可能的,我只是在做垂死的挣扎。经过这么多年office的发展,在数据格结构上,会不会只有那么一点改进呢?毕竟即便是在Excel里,如果我用的是VBA+ADO+SQL,实际上我是把数据以数据库形态进行SQL的加工。于是我就想,万一他们的数据格式是一样的,万一Excel已经进化了那么一点点呢。但现实告诉我,虽然都是VBA,虽然都是自定义函数,但是因为他们操作的是SQL,所以出来的效果完全不一样。

SQL的语法结构非常类似,无论你用的是什么类型的数据库,但在一些细节上,大家的处理是有区别的,我觉得Excel里面和Access里SQL最大区别在于因为我在Excel里面SQL用的是ADO的方式,所以这就意味着虽然我写的是SQL的语法,但实际上那是以字符串的名义存在的东西。在Excel VBA的数据格式里,我写的结构化语言全部都是字符串,但是在Access里,在SQL的查询界面里,那个东西不是字符串。我没有认真看某些单词有没有高亮,因为那是特殊字段又或者是保留字段。当我直接把Access VBA里的那个自定义模块挪到Excel VBA里,发现打开记录集的方式根本不一样,语法不一样。因为在Access里本来就是一个数据库,但在Excel VBA的ADO里是通过一些特殊的语句打开那个记录集的。

回到一开始,为什么我得这么折腾呢?因为一直以来我都发现,从来没有一个人能在Excel VBA+ADO+SQL的模式之下在分组聚合的时候把文本以某些字符去重连接成字符串。要实现这个功能,只能最后把结果输出,然后在VBA里通过字典的处理,再把那些合并好的东西与其它东西结合在一起形成一个新的数组,最后往单元格里面输出,而不能像其它SQL查询结果那样直接就在单元格里全部输出。先输出到字典,然后再用字典合数组合并的难易程度跟那个数据最终的查询结果复杂程度有关。在高端的数据库里,文本聚合连接有直接的函数可以做到,比如在MySQL里面直接group_concat就可以做到,在其它专业数据库里,那个函数的名字各有不同,但都能实现同一个效果,就是把字符聚合拼接。在Power Query里,他们没办法在窗口界面让你实现这个,但可以在高级编辑器里面通过text.combine的方式实现这种功能。在Power Pivot里,concatenatex也能实现这种文本的拼接。让人觉得非常无语的是,都到了Microsoft 365时代,Access这个东西依然是office大家族的一部分,但这种肯定有需求的东西居然没有一个官方函数实现,但你又可以通过在模块里用自定义函数的方式达成。Excel的VBA里不能秒生成这种东西,但在函数层面textjoin+unique+filter可以。为什么就不能在Excel VBA支持的SQL里面出现这个文本拼接的官方函数呢?如果他们真觉得没有必要的话,为什么Power Bi的软件就可以实现呢?我不知道Power Bi软件是一开始就能实现,还是后面慢慢进化出来实现的,反正我第1次看到Power Bi相关软件的时候,他们已经能实现了。

一整天的挣扎下来好像没什么进展,但我在这些问题上又仔细思考了一番。

如何利用 Legado 上使用 Azure TTS 进行听书?

Legado 应该是安卓手机最好的第三方电子书阅读APP之一,我之所以喜欢它,除了它支持各种格式与书源之外,更重要的是它支持 Azure TTS 文字转语音--听书。Azure TTS在文字转语音方面,是我现时听到最好的文字转语音引擎,没有之一。

本教程不需要安装任务第三方文字转语音引擎,纯代码设置。

Legado 是开源软件,下载地址:https://github.com/gedoor/legado ,大家前往下载安装既可。至于 Azure TTS 申请,网上有很多教程,大家自行搜索,实在不会,那就看看知道这篇大神分享的文章吧--在微软云平台Azure上创建个性化的语音(TTS)服务

以下为在 Legado 上设置Azure TTS的详细教程。我知道大家都难,所以尽量使用图片形式给大家展示。

1、在 legado 打开任一电子书,然后点击屏幕中间,显示阅读设置菜单。
2、点击朗读按钮,进入朗读界面。
3、在朗读界面,点击右下角按钮,进入朗读设置界面。
4、在朗读设置设面,点击“朗读引擎”选项。

5、在朗读引擎界面,点击右上角+号,进行新增引擎。
6、点击右上角三个点的菜单选项。
7、把以下代码修改成你自已的,然后粘贴源既可。
{ "concurrentRate": "0", "contentType": "audio/mpeg", "enabledCookieJar": false, "header": "{\n \"Ocp-Apim-Subscription-Key\": \"改为你自已的AzureTTS钥匙\",\n \"Content-Type\": \"application/ssml+xml\",\n \"X-Microsoft-OutputFormat\": \"audio-16khz-128kbitrate-mono-mp3\",\n \"User-Agent\": \"legado\"\n}", "id": 1685895171535, "lastUpdateTime": 1686557728110, "loginCheckJs": "", "loginUi": "", "loginUrl": "", "name": "Azure--TTS", "url": "https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1,{\n \"method\": \"POST\",\n \"body\": \"{{speakText}}\"\n}" }
8、返回到5步的界面,选择好语音引擎后,点击全局既可。

你可以在这里选择你喜欢的音色替换概可。https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/language-support?tabs=tts ,我默认的是 zh-CN-XiaochenNeural -- 晓辰。

本文完毕,这样的设置好处,就是不需要安装任务第三方的文字转语音引擎和app,这对于我来说是最好的方案。如果大家可以根据自已的需求,选好相应的语音样式既可。

❌