2023年11月28日 星期二

[EXCEL] 使用open API 快速查詢公司登記基本資料 系統介接API輕鬆上手(上篇)

[EXCEL] 使用open API 快速查詢公司登記基本資料 系統介接API輕鬆上手

這招讓不懂程式的你,也能批次輕鬆上手取得開放平台的資料,這招進階版的EXCEL功能值得研究

最近有使用者拿著一整張公司清單,想要取得廠商基本資料,必須去網站一一查出所有的統編,地址,資本額等重要資訊,通常我們都會來到向政府登記的出進口廠商登記資料查詢,但事實是科技來自於人性的惰性,當你有上百筆上千筆的資料要完成任務的時候,你看到要一一輸入,還有驗證碼的時候,我們就會想放棄了。

以下是進口廠商登記資料查詢網站

https://fbfh.trade.gov.tw/fb/web/queryBasicf.do



不過實際上政府早就有開放openAPI的技術,但是這一聽就讓一般使用者退卻了好幾步了吧!

這次不藏私,分享一下怎麼無腦使用EXCEL 去輕鬆抓取資料,這真的很值得學起來,可以讓的EXCEL功夫大增!

首先找到了政府提供的 商工行政資料開放平台 
https://data.gcis.nat.gov.tw/main/index

接著來到開發指引,我先挑選用公司名稱關鍵字來做示範,因為我手上的範例正好就是有一長排的公司完整名稱清單,最適合使用關鍵字來查詢,我是使用XML範例,因為你不需要去搞懂程式,你只需要搞懂URL,怎麼湊出正確的連結就可以了

當我們將XML範例整串URL 複製到新的網頁上執行候你就能立刻看到結果,接下來就要開始示範怎麼利用到EXCEL中。



第一步  首先在公司名稱旁新增一個API 專用的URL

當然你可以套用公式,這樣你上千筆的URL都可以輕鬆完成了,我使用了CONTACT的公式,還有關鍵字自動取得A2這個欄位

公式: =CONCAT("http://data.gcis.nat.gov.tw/od/data/api/6BBA2268-1367-4B42-9CCA-BC17499EBE8C?$format=xml&$filter=Company_Name like ",A2," ","and Company_Status eq 01&$skip=0&$top=50")



第二步 重頭戲要來了,在EXCEL中取得資料,請先copy 你完成好的第一個URL,接著選擇Data->From Web



按下OK後,左側可以看到已經出現row了,點下去右側就能看得到結果


接著使用Load To...可以指定匯出地方

可以隨意指定你想展示的地方



接著就可以取得公司資料囉!



好啦! 下次在繼續分享上百筆&千筆的做法囉!
如果你覺得有用請幫我按下網頁任何一處的廣告,感謝您











2022年3月4日 星期五

[VB.NET] 簡易加密解密工具

 





Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

    End Sub

    Private Sub btnEnter_Click(sender As Object, e As EventArgs) Handles btnEnEnter.Click
        If txtKey.Text.Trim.Length <> 8 Then
            MsgBox("Key請設定為8位數!")
            Exit Sub
        End If
        txtPassword.BackColor = Color.LightGreen
        txtENPassword.BackColor = Color.White
        txtPassword.Text = Decrypt(txtENPassword.Text.Trim, txtKey.Text.Trim)
    End Sub
    Private Sub btnDeEnter_Click(sender As Object, e As EventArgs) Handles btnDeEnter.Click
        If txtKey.Text.Trim.Length <> 8 Then
            MsgBox("Key請設定為8位數!")
            Exit Sub
        End If
        txtENPassword.BackColor = Color.LightGreen
        txtPassword.BackColor = Color.White
        txtENPassword.Text = Encrypt(txtPassword.Text.Trim, txtKey.Text.Trim)
    End Sub

    Private Sub btnClean_Click(sender As Object, e As EventArgs) Handles btnClean.Click
        txtENPassword.Text = ""
        txtPassword.Text = ""
        txtPassword.BackColor = Color.White
        txtENPassword.BackColor = Color.White
    End Sub


#Region "字串解密"
    Public Function Decrypt(ByVal vsToDecrypt As String, ByVal vsKey As String) As String
        Try
            Dim des As New System.Security.Cryptography.DESCryptoServiceProvider()
            ''把字符串放入byte數組
            Dim len As Integer
            len = vsToDecrypt.Length / 2 - 1
            Dim inputByteArray(len) As Byte
            Dim x, i As Integer
            For x = 0 To len
                i = Convert.ToInt32(vsToDecrypt.Substring(x * 2, 2), 16)
                inputByteArray(x) = CType(i, Byte)
            Next

            ''建立加密對象的密鑰和偏移量,此值重要,不能修改
            des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(vsKey)
            des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(vsKey)

            Dim ms As New System.IO.MemoryStream()
            Dim cs As New System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor, System.Security.Cryptography.CryptoStreamMode.Write)

            cs.Write(inputByteArray, 0, inputByteArray.Length)
            cs.FlushFinalBlock()

            Return System.Text.Encoding.Default.GetString(ms.ToArray)
        Catch ex As Exception
            Return ""
        End Try
    End Function
#End Region


#Region "字串加密"
    Public Function Encrypt(ByVal vsToEncrypt As String, ByVal vsKey As String) As String
        Dim des As New System.Security.Cryptography.DESCryptoServiceProvider()
        Dim inputByteArray() As Byte
        inputByteArray = System.Text.Encoding.Default.GetBytes(vsToEncrypt)
        ''建立加密對象的密鑰和偏移量
        ''原文使用ASCIIEncoding.ASCII方法的GetBytes方法
        ''使得輸入密碼必須輸入英文文本
        des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(vsKey)
        des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(vsKey)
        ''寫二進制數組到加密流
        ''(把內存流中的內容全部寫入)
        Dim ms As New System.IO.MemoryStream()
        Dim cs As New System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor, System.Security.Cryptography.CryptoStreamMode.Write)
        ''寫二進制數組到加密流
        ''(把內存流中的內容全部寫入)
        cs.Write(inputByteArray, 0, inputByteArray.Length)
        cs.FlushFinalBlock()
        ''建立輸出字符串
        Dim ret As New System.Text.StringBuilder()
        Dim b As Byte
        For Each b In ms.ToArray()
            ret.AppendFormat("{0:X2}", b)
        Next
        Return ret.ToString()
    End Function
#End Region
End Class


2022年2月17日 星期四

[Teams練功房]視訊會議背景設定 文字翻轉

使用Teams 視訊會議可以更換自己的背景特效

但是當選擇有文字的時候,我們可以注意到背景是靜像的,也就是文字是相反的

起初還以為是Teams的Bug,畢竟使用過Zoom的都知道有靜像這個選項可以自由決定

反之目前我使用的是企業版的Teams是沒有這個選項的,我的版本是1.5.00.2164(64位元) 給你參考


但經過實測,雖然自己是反向的,但其他參加會議的人員看到的方向是正確的,
所以當設計背景的人建議還是別加上文字啊😅😅
不然真的是讓IT頭很暈,需要一直要解釋








2022年2月8日 星期二

[Skype for Business] Exchange needs your credentials. Until then you might see outdated info in Skype for Business

 Skype for Business 偶而會在訊息欄處跳出訊息,上面顯示【Exchange needs your credentials. Until then you might see outdated info in Skype for Business】


少了這個與AD的認證會影響到行事曆的提醒


目前測試可以直接成功的解法,在檔案總管中直接開啟下面路徑

%UserProfile%\AppData\Local\Microsoft\Office\16.0\Lync


操作步驟

1.先結束Skype for Business

2.找到路徑【%UserProfile%\AppData\Local\Microsoft\Office\16.0\Lync】底下的資料夾可以找到sip_user@domain.com資料夾,可直接刪除

3.重新啟動Skype for Business即可





2022年2月7日 星期一

[VB.NET]判斷月份天數

因應2月份不固定最後一天的天數,如果單純寫成30或31天都會造成程式上的錯誤,所以還是直接使用判斷來指定天數會比較妥當。

 OrderYear =2022

OrderMonth =2


            Dim DatestringStart As String = OrderYear & "/" & OrderMonth & "/01"

            Dim Days As Integer = System.DateTime.DaysInMonth(OrderYear, OrderMonth)

            Dim DatestringEnd As String = OrderYear & "/" & OrderMonth & "/" & Days


參考資料

DateTime.DaysInMonth(Int32, Int32) 方法

2022年1月11日 星期二

[Vb.NET] 搜尋指定文字資料夾 & 尋找資料夾中的副檔名 或 特定文字

         Dim sSourcePath As String = txtDirection.Text.Trim

        Dim sDestPath As String = ""

        Dim sTextToFind As String = "搜尋指定文字資料夾"

        Dim FolderName As String = ""

        Dim PrinterFolderPath As String = sSourcePath


        For Each sDir In Directory.GetDirectories(sSourcePath, "*" & sTextToFind & "*")

            FolderName = Path.GetFileName(sDir)

            PrinterFolderPath = sSourcePath & "\" & FolderName

            Dim di As New DirectoryInfo(PrinterFolderPath)



            '抓取資料夾中檔名,並只取PDF

            For Each fi As FileInfo In di.GetFiles()

                If fi.Extension.ToLower = ".pdf" Then

                   '資料夾中檔案副檔名是PDF的

                End If

           

                If fi.Name.ToLower.Contains("TEST") Then

                   '找出資料夾中的檔案名稱有包含TEST的

                End If


            Next

        Next

2021年10月15日 星期五

[OUTLOOK 2016 O365] 隱藏最近使用的檔案Office清單

當我們在Outlook 發信的時候,有時候在別人面前寄信,總是會不小心被看到一些自己的隱私

Outlook 改版至Office 2016 後附加檔案新增了最近使用的項目,想要關掉它卻又找不到設定選項

目前看來只有改機碼能解決


請在搜尋處輸入

Regedit


路徑輸入Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Options\Mail


手動新增

DWORD(32-bit) Value

輸入

MaxAttachmentMenuItems

值類型
REG_DWORD

0