移動端導出excel_連載系列【4】Excel開發移動端quot;APPquot;

前三篇文章介紹了百度地圖生成器、源代碼編輯器、GPS經緯度批量轉換工具、源代碼編輯器中添加自定義功能按鈕和地圖控件。這些寫好的Java Script代碼雖然可以實現所有期望的結果,但畢竟不是一個HTML文件,不便于傳播和使用,更無法變成一個類似APP的存在。

本文將介紹,如此借助VBA編程,用Excel生成一個HTML文件。雙擊打開文件,會調用百度地圖,并可實現之前代碼所有功能。

01

創建FSO對象模型

這里主要用到的是VBA FSO對象模型。文件系統對象FSO的英文全稱是File System Object。FSO對象模型包含在Scripting 類型庫(Scrrun.Dll)中,它同時包含了Drive、Folder、File、FileSystemObject和TextStream五個對象。本例中用到了FileSystemObject,它是FSO對象模型中最主要對象,并提供了一套完整的可用于創建、刪除文件和文件夾,收集驅動器、文件夾、文件相關信息的方法。

創建FSO對象模型:

一、引用法:

首先需要在在工程中引用這個文件,單擊“工程”,“引用”,然后在“引用”對話框中選中“Microsoft Scripting Runtime”前的復選框,然后單擊“確定”。

807d7bea535e7433c2c4bfe716a98184.png

之后,可以用如下語句定義該對象:

Dim fs As New FileSystemObject;

二、創建法:

通過CreateObject方法創建一個FSO對象:

Set?fs?=?CreateObject("Scripting.FileSystemObject")

本例中使用創建法。創建之后,就可以利用創建的對象模型的方法進行相關操作了。

02

使用CreateTextFile方法

CreateTextFile方法創建一個新的文件并返回其TextStream對象,微軟Office 開發人員中心對其解釋如下:

a11f8a371cad213ceb81e0a9f07e4b25.png

在本例中通過以下代碼,實現了對CreateTextFile方法的調用:

Set f = fs.CreateTextFile(ThisWorkbook.Path & sName & ".txt", True)

上述代碼,創建了一個新文本文件。之后,還需配合使用f.writeline寫入向該文本文件中寫入字符串,也即拼接HTML文件代碼的過程。完整的生成HTML文件的代碼及注釋如下:

Sub?CreateHTML()Dim sName As String '定義一個字符串變量Dim fs As Object '定義一個對象Dim fDim?r?As?RangesName?=?"\差旅協議酒店地圖查詢工具"On?Error?Resume?Next?'容錯處理'如果當前文件夾中已經存在同名文件,則先刪除該文件Kill ThisWorkbook.Path & sName & ".html"'先創建Txt文件Set fs = CreateObject("Scripting.FileSystemObject")Set f = fs.CreateTextFile(ThisWorkbook.Path & sName & ".txt", True)   'writeline寫入字符傳并加入一個換行符???f.writeline?(Worksheets("Code").Range("B2").Value)???'判斷:若為手機版,則使用C2單元格代碼。否則寫入C3單元格代碼。???If?Worksheets("Code").Range("C5")?=?True?Then??????????f.writeline?(Worksheets("Code").Range("C2").Value)???Else????????f.writeline?(Worksheets("Code").Range("C3").Value)???End?If   '判斷:若為手機版,則無直線測距功能;若為PC版,則增加直線測距功能;???If?Worksheets("Code").Range("C5")?=?True?Then        For Each r In Worksheets("Code").Range("E4:E10")              f.writeline (r.Value)????????Next?r???Else        For Each r In Worksheets("Code").Range("E3:E10")            f.writeline (r.Value)????????Next?r???End?If???f.writeline?(Worksheets("Code").Range("F2").Value)   ???Call?CombinePlotter ’調用字符串合并函數???f.writeline?(MarkerPlotter)???f.writeline?(Worksheets("Code").Range("G2").Value)f.Close'將生成的 TXT文件重命名為HTMLName ThisWorkbook.Path & sName & ".txt" As ThisWorkbook.Path & sName & ".html"End Sub

代碼說明:

1.整段代碼功能是將下圖中著色單元格內容通過f.writeline 寫入HTML文件,其本質上是對原始HTML文件代碼進行分隔,然后在分隔處插入自定義的部分。

ac5398f232f7886f71e724fdd9bffcb2.png

2.這里Call CombinePlotter調用了一個自定義子過程,其作用是將之前生成的協議酒店列表組裝成一個字符串,然后寫入txt文件的指定位置。

b342f3db1300e321d1ece8324d8b4f9a.png

其中子過程CombinePlotter的代碼如下:

Sub CombinePlotter()Dim?r?As?Range,?rng?As?RangeWith Worksheets("酒店列表")    Set rng = .Range("S2:S128") '如有多于128行,可修改此處End?WithMarkerPlotter?=?EmptyFor?Each?r?In?rng????If?Not?r?=?""?Then????On?Error?Resume?Next????MarkerPlotter?=?MarkerPlotter?&?r.Value????End?IfNext rMarkerPlotter?=?Right(MarkerPlotter,?Len(MarkerPlotter)?-?1)End Sub

至此,我們便可以將之前已經運行成功的Java Script代碼,重新組裝成TXT文件并通過重命名繼而生成了可傳播可存儲的HTML文件,其保留了所有自定義功能,并可雙擊后通過瀏覽器打開。

03

神器的DLL動態鏈接庫

以上VBA代碼運行后只能生成一個HTML文件,但并不會直接用瀏覽器將其打開。如果想在代碼運行后需要直接查看效果,需要用到神奇的"shell32.dll"。

VBA本身并不完美,不具備一些系統底層的操作。但其提供了一種方式可以直接調用由C語言編寫的動態鏈接庫(DLL)中的過程。Windows 操作系統主體由成千上萬個過程(API)以及各種用其他語言編寫的例程構成。通過DLL開發人員可以訪問所有這些Windows 操作系統下的過程及例程。這就意味著,VBA無所不能。在此過程中,DLL被VBA 看做服務和資源的提供者, VBA通過Declare 語句向 DLL發出合法的請求, 從而獲得DLL中過程的使用權。

通過以下代碼,便可以在創建好HTML文件后,直接用瀏覽器打開。這樣做的一個好處是,不必每次運行完程序后,還需找到文件夾下剛剛生成的HTML文件進行雙擊打開操作。

Private Declare Function ShellExecute _  Lib "shell32.dll" Alias "ShellExecuteA" ( _  ByVal hWnd As Long, _  ByVal Operation As String, _  ByVal FileName As String, _  Optional ByVal Parameters As String, _  Optional ByVal Directory As String, _  Optional ByVal WindowStyle As Long = vbMinimizedFocus _  ) As LongSub?MapPlotterExecution()Application.ScreenUpdating?=?False?'暫停刷新屏幕Call?CreateHTMLCall?ShellExecute(0,?"Open",?ThisWorkbook.Path?&?"\差旅協議酒店地圖查詢工具.html")Application.ScreenUpdating?=?True?'恢復刷新屏幕End Sub

如果是一次性生成HTML文件,其優勢尚不明顯;若后續想將其作為一個小工具,按照自定義的列表和要實現的功能,反復地運行程序查看結果,優勢就很明顯了。對比如下:

aa9acfc1230ec7ee2ac57967754eed01.gif

當如下代碼被注釋掉的時候,點擊顯示地圖運行主程序,只是單純地生成了名為差旅協議酒店地圖查詢工具的HTML文件;而取消注釋啟用代碼后,點擊顯示地圖可直接調用打開瀏覽器。

Call?ShellExecute(0,?"Open",?ThisWorkbook.Path?&?"\差旅協議酒店地圖查詢工具.html")

至此,我們便將所有需求的功能和樣式實現了。如需下載Excel源文件,請回復關鍵詞"工具"。

寫到這里,該連載系列就正式步入了尾聲。借道文件系統對象FSO,我們從VBA成功地生成了HTML文件;通過shell32.dll,我們可以直接調用并打開瀏覽器,打開HTML文件,完美地實現了即時交互。這也意味著我們可以依托百度地圖API接口,基于VBA進行一系列數據地圖IT系統的開發,新世界的大門從此打開。本質上還是用Java Script這種直譯式腳本語言進行的網頁前端編程,其呈現效果堪比任何BI軟件或者其他編程語言。本文只做思路上的啟發和引導,不再進行更深入的分享。如果有興趣的小伙伴可以自行深入探索:

1.分指標顯示區縣色溫圖

5facfc859ea36385ba59576867fd2447.gif

2.分指標顯示郵編色溫圖

2839f3c17394e7c59a069ef17308d096.png

3.顯示經銷商覆蓋范圍公里環

d904dead9e96bd888d882cb15a5d7869.png

4.顯示客戶便利度地圖

5b53867efa7514fd8dbb91717b1472f9.png

5.顯示銷量熱力圖

ca7e0b8ceb7151e2aa8a20b9020653ef.png

正所謂運用之妙,存乎一心。Excel是一種非常強大的工具,即便在Tableau崛起、Python橫行的今日,依舊有巨大的學習價值。當然,很多Tableau和Python更擅長的事,也不要強Excel所難。尺有所短,寸有所長,畢竟最終目標是探尋最優方案解決工作中面臨的實際問題。

"當你手里有一把錘子時,看什么都像釘子"。不拘泥于某一種工具而是進行多元化的學習,不斷突破自身框架束縛,了解多個領域的最佳實踐,方為上策!

該連載系列文章合集如下:

1.用Excel開發移動端"APP"

2.連載系列【1】Excel開發移動端"APP"

3.連載系列【2】Excel開發移動端"APP"

4.連載系列【3】Excel開發移動端"APP"

3ce39027f348170298483ad4f18df301.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454180.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454180.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454180.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《操作系統》OS學習(二):啟動、中斷、異常

Bootloader:加載OS。操作系統一開始是放在DISK(硬盤)中,并不是放在內存中。 BIOS:基本I/O處理系統。存放在ROMRead-Only Memory)只讀存儲中 BIOS(Basic Input/Output System)基本輸入輸出系統。…

[GCC for C]編譯選項---IDE掩蓋下的天空

編譯選項 ---------IDE掩蓋下的天空 /*************************************** * gcc for c language ***************************************/ Single Source to Executable $ gcc helloworld.c [-o howdy] 默認生成的名字a.exe ______________________________________ …

2016級算法第二次上機-F.ModricWang's Number Theory II

891 ModricWangs Number Theory II 思路 使得序列的最大公約數不為1,就是大于等于2,就是找到一個大于等于2的數,它能夠整除序列中的所有數。 考慮使得一個數d整除數組中所有數的代價: 如果一個數不能被b整除,那么可以花…

常用css屬性集(持續更新…)

禁止換行,超出部分顯示…:a. 代碼:.hide_word{ max-width: 100px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } b. 效果: 本文轉自 bilinyee博客,原文鏈接: http://blog.51cto.co…

parallels網絡初始化失敗_33 個神經網絡「煉丹」技巧

自然語言處理Andrej Karpathy 是深度學習計算機視覺領域、與領域的研究員。博士期間師從李飛飛。在讀博期間,兩次在谷歌實習,研究在 Youtube 視頻上的大規模特征學習,2015 年在 DeepMind 實習,研究深度強化學習。畢業后&#xff0…

《操作系統》OS學習(三):系統調用

例子 首先看一個標準C庫的例子:當我們程序中使用了C庫中的printf()函數,實際在底層是在內核態中調用了write()函數。圖中右側則是將程序代碼與C庫都算到應用程序中,內核提供了一個系統調用接口。 從這個例子我們可以得到以下幾點&#xff1a…

cygwin/gcc與MinGW

cygwin/gcc和MinGW都是gcc在windows下的編譯環境,但是它們有什么區別?在實際工作中如何選擇這兩種編譯器呢?cygwin/gcc完全可以和在linux下的gcc劃等號,這個從boost庫的劃分中就可以看出來端倪,cygwin下的gcc和linux下的gcc使用的是相同的T…

JavaScript服務器端開發技術(對象屬性的枚舉與查詢)

既然對象是屬性的集合,那么檢測與枚舉集合中的屬性就是一項重要任務。對此,我們來分別看一下ES3和ES5提供的解決方案。 1) ES3枚舉方案 示例代碼: var contacts{ ID:[0,1,2,3,4,5], names:["Zero","One","Two&q…

treelistview 所有節點失去焦點_垃圾詢盤過濾,焦點科技的 Milvus 實踐

文章作者:黎陽,焦點科技軟件開發工程師李成龍,Zilliz 數據工程師Milvus (https://milvus.io/) 向量搜索引擎開源半年以來,全球已經有數百家企業或組織用戶。焦點科技是一家以 B2B 外貿交易為主營業務的科技公司,也是 M…

《操作系統》OS學習(四):計算機體系結構、內存層次和地址生成

計算機除了計算能力之外還有存儲能力,存儲能力即計算機擁有一系列的存儲介質,我們可以在存儲介質上存儲我們的代碼和數據。計算機體系結構中約定了哪些地方可以用來存儲數據:CPU內的寄存器、內存和外存。不同的存儲介質,容量、速度…

GCC中SIMD指令的應用方法

X86架構上的多媒體應用開發,如果能夠使用SIMD指令進行優化, 性能將大大提高。目前,IA-32的SIMD指令包括MMX,SSE,SSE2等幾級。 在GCC的開發環境中,有幾種使用SIMD指令的方式,本文逐一介紹。X86的…

使用angular4和asp.net core 2 web api做個練習項目(二), 這部分都是angular

上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from angular/core; import { Http, Headers } from angular/http; import { Observable } from rxjs/Observable; import { ErrorHandler } from angular/core; import rxj…

leelen可視對講怎么接線_樓宇對講系統怎么布線 樓宇對講系統布線方式【介紹】...

隨著智能小區規模不斷增加,樓宇可視對講系統應用越來越廣泛,因而視頻信號的傳輸方式與布線設計顯得越來越重要。視頻信號與數據和音頻信號不同,可行的一種傳輸方式為視頻信號基帶傳輸,下面小編就簡要介紹一下這種傳輸方式和布線方…

路由匯總實例

5.2.2.2 路由匯總策略 之前提到過,在網絡管理員計劃好子網選擇并進行預期地路由匯總時,手動路由匯總工作能取得最佳效果。例如,之前的例子設定好了一個考慮周全的計劃,管理員只使用遠離Yosemite路由器并以10.2開頭的子網。這個規定…

《操作系統》OS學習(五):連續內存分配 內存碎片、動態分配、碎片整理、伙伴系統

內存碎片 在沒有其他方式輔助的情況下,我們分配給一個進程的內存是連續的。在分配時候我們需要有動態分配與碎片處理。如何理解呢?就是每個進程需要一塊內存,我們要選取合適的位置的內存分配給它。當有的進程先結束了內存還給操作系統&#…

GCC 中文手冊 - 摘自純C論壇

GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents NAME gcc,g-GNU工程的C和C編譯器(egcs-1.1.2) 總覽(SYNOPSIS) gcc[option|filename ]... g[option|filename ]... 警告(WARNING) 本手冊頁內容摘自GNU C編譯器的完整文檔,僅限于解釋選項的含義…

python如何實現支持中文

#codingutf-8print("我要python支持中文") 默認情況下,python是不支持中文的。 如果要實現python支持中文(我是從python3.6開始學習的),只要在python文檔的開頭加入:“#codingutf-8"就可以了。轉載于:h…

世界之窗瀏覽器刪除文本框信息_文本框——Excel里的便利貼

工作表里面的單元格應該是足夠我們來記錄數據和信息了。但是文本框這個功能在工作表中還是存在,可以理解為便利貼功能。插入文本框1.點擊“插入”選項卡。2.然后點擊“文本框”。3.在下拉菜單里面,有兩種可供選擇:橫排文本框和垂直文本框。在…

RHEL 5服務篇—常用網絡配置命令

常用網絡配置命令 在“Linux系統管理”的文章中,大家已經學習了Linux系統的基本管理命令和技巧,為了進一步學習Linux網絡服務打下了良好的基礎。所以我作者以后將陸續推出Linux網絡服務的相關文章。希望大家能給與我大大的支持。 今天我們就來學習一下…

清華大學《操作系統》(六):非連續內存分配 段式、頁式、段頁式存儲管理

背景 連續內存分配給內存分配帶來了很多不便,可能所有空閑片區大小都無法滿足需求大小,這個分配就會失敗。基于這種現狀,就有了非連續內存分配的需求。非連續分配成功的幾率更高,但也面對更多的問題,比如分配時是不是…