Excel催化剂开源第49波-Excel与PowerBIDeskTop互通互联之第三篇

在PowerBIDeskTop开启的SSAS服务,和Sqlserver所开启的一个本质的区别是,前者其端口号是随机生成的,即上一次打开得到的端口号,下一次关闭后再打开,系统分配给它新的端口号,然后者由于是服务器版的,服务器的SSAS端口号是固定的,且服务器通常都是长期打开的,不存在端口号变化引发数据链接字符串要变动的状况。正则表达式

此篇对应功能实现出自:第3波-与PowerbiDesktop互通互联(Excel透视表链接PowerbiDesktop数据模型)https://www.jianshu.com/p/e05460ad407d数据库

Excel链接PowerBIDeskTop端口号更改了怎么办?

由于这个问题,必须在Excel上对其端口号进行从新更新操做,才能够保证再次打开PowerBIDeskTop的SSAS服务后,原来存储在Excel上的经过链接字符串引用到的数据结果仍然能够保持和SSAS模型有链接关系 。编程

因此就出现了更新链接字符串的功能需求,固然尽量地减小用户的操做,让更友好的界面来引导用户做必要的识别从新匹配。服务器

Excel与PowerBIDeskTop链接,是用工做薄链接来承接的,因此只需遍历工做薄链接,将其展示给用户。微信

private void formPbidUpdateConnect_Load(object sender, EventArgs e)
        {
            foreach (Excel.WorkbookConnection wkbCnn in Common.ExcelApp.ActiveWorkbook.Connections)
            {
                if (wkbCnn.Description == "pbidConnection")
                {
                    int rowIndex = this.dataGridView1.Rows.Add();
                    this.dataGridView1.Rows[rowIndex].Cells[0].Value = wkbCnn.Name;
                }
            }
            this.fileName.Width = this.workbookConnect.Width + 50;
            this.Width = this.fileName.Width * 2 + 80;

            pbidPortTittleMappings = PbidConnection.GetPbidPortTittleMappings();
            this.fileName.Items.AddRange(pbidPortTittleMappings.Select(s => s.FileName + "|" + s.Port).ToArray());
        }

最终Excel工做薄链接,只须要用下正则表达式,将原来的端口号给替换一下便可。app

private void btnEnter_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in this.dataGridView1.Rows)
            {
                if (row.Cells[1].Value!=null)
                {
                    Excel.WorkbookConnection wkbCnn = Common.ExcelApp.ActiveWorkbook.Connections[row.Cells[0].Value];
                    int newport = int.Parse(row.Cells[1].Value.ToString().Split(new char[] { '|' })[1]);
                    string newDbName = pbidPortTittleMappings.Where(s => s.Port == newport)
                                                        .Select(t => t.DbName).FirstOrDefault();
                    string newModelName = pbidPortTittleMappings.Where(s => s.Port == newport)
                                                        .Select(t => t.ModelName).FirstOrDefault();
                    string wkbcnnString = wkbCnn.OLEDBConnection.Connection;
                    wkbcnnString = Regex.Replace(wkbcnnString, @"(?<=localhost:)\d+", newport.ToString());
                    wkbcnnString = Regex.Replace(wkbcnnString, @"(?<=Initial Catalog=)[^;]+", newDbName);
                    wkbCnn.OLEDBConnection.Connection = wkbcnnString;
                    wkbCnn.OLEDBConnection.CommandText = newModelName;
                }

            }
            this.Close();
        }

结语

在Excel、PowerBIDeskTop、.Net编程三者知识的融合下,打造出来最精彩的Excel催化剂功能应用,出自国人之手,而且不管在功能实现仍是原始代码都无私奉献给PowerBI社区,供应社区繁荣。ide

若你也受感动,何不尽一己微博之力,加入到分享Excel催化剂的行列当中?函数

技术交流QQ群

QQ群名:Excel催化剂开源讨论群, QQ群号:788145319
Excel催化剂开源讨论群二维码工具

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周可以上线一个大功能模块。Excel催化剂插件承诺我的用户永久性无偿使用!学习

Excel催化剂插件使用最新的布署技术,实现一次安装,往后全部更新自动更新完成,无需重复关注更新动态,手动下载安装包从新安装,只需一次安装便可随时保持最新版本!

Excel催化剂插件下载连接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

联系做者

公众号

取名催化剂,因Excel自己的强大,并不是全部人可以立马享受到,大部分人仍是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,并且高手们也已经实现出来,就是本身怎么弄都弄不出来,或者更糟的是还不知道Excel可以作什么而停留在不断地重复、机械、手工地在作着数据,耗费着无数的青春年华岁月。因此催生了是否能够做为一种媒介,让广大的Excel用户们能够瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是全部事情都要交给Excel去完成,也不是全部事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其余更多一样精彩强大的技术、工具等。*Excel催化剂也将借力这些其余技术,让Excel可以发挥更强大的爆发!

关于Excel催化剂做者

姓名:李伟坚,从事数据分析工做多年(BI方向),一名一样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、惟品会)

技术路线从一名普通用户,经过Excel软件的学习,今后走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识再也不太吃力,同时也造成了本身的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展现等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯做了重大调整,从原来的正职工做,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦从新回到正职工做,对Excel催化剂的运营和开发一定受到很大的影响(正职工做时间内不可能维护也不可能随便把工做时间内的成果公布于外,工做外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们可以给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的能够和所在公司及同行推荐推荐,让个人技术能够在贵司发挥价值,实现共赢(初步设想能够数据顾问的方式或一些小型项目开发的方式合做)。

相关文章
相关标签/搜索