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催化劑一直能運行下去,我所惠及的羣體們可以給予支持(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的能夠和所在公司及同行推薦推薦,讓個人技術能夠在貴司發揮價值,實現共贏(初步設想能夠數據顧問的方式或一些小型項目開發的方式合做)。

相關文章
相關標籤/搜索