Sql 導入到 Excel 工具

Sql 導入到 Excel 工具

這個VBA宏的步驟如下:

  1. 通過文件對話框選擇SQL文件。
  2. 讀取文件內容。
  3. 解析文件中的每一行,如果包含“insert into”,則提取表名。
  4. 檢查是否已經存在以表名命名的工作表,如果不存在則創建新的工作表。
  5. 將數據插入到相應的工作表中。

Tip:因為 sql 文本 大小寫等問題實際比較復雜,所以本例謹慎使用。
一些意外的情況,比如字段包含一些 ) values 之類的,主要是定位問題,再就是值的長度,萬一值里面也有,逗號,再就是空格等問題;
用python應該會好處理些;
以下VBA腳本經供參考;可以自行綁定按鈕;

針對這樣式的:

insert into aaa (aa,bb,cc) values ('2','','3aa');
insert into aaa (aa,bb,cc) values ('1',null,'');
' +++++++++++++++++++++++++++++++++++++++++++++++++++
' author Mr.qyb_y
' Version 1.0.0
' Date 2024-07-09 21:10
' +++++++++++++++++++++++++++++++++++++++++++++++++++
Sub ImportSQLToExcel()Dim fd As FileDialogDim filePath As StringDim fileContent As StringDim lines As VariantDim line As VariantDim sht As WorksheetDim currentSheetIndex As Integer' 創建文件對話框以選擇SQL文件Set fd = Application.FileDialog(msoFileDialogFilePicker)fd.Title = "Select SQL File"fd.Filters.Add "SQL Files", "*.sql", 1If fd.Show = -1 ThenfilePath = fd.SelectedItems(1)ElseMsgBox "No file selected.", vbExclamationExit SubEnd If' 讀取文件內容fileContent = ReadFileContent(filePath)lines = Split(fileContent, vbCrLf)currentSheetIndex = Sheets.Count' 解析文件內容并插入到Excel中For Each line In linesIf InStr(line, "insert into") > 0 ThenDim tableName As StringDim columnNames As StringtableName = ExtractTableName(CStr(line)) ' 強制轉換為字符串類型columnNames = ExtractColumnNames(CStr(line)) ' 提取列名' 檢查工作表是否已經存在On Error Resume NextSet sht = Sheets(tableName)On Error GoTo 0' 如果工作表不存在,則創建新的工作表,并插入列名If sht Is Nothing ThenSet sht = Sheets.Add(After:=Sheets(currentSheetIndex))sht.Name = tableNamecurrentSheetIndex = currentSheetIndex + 1' 插入列名InsertColumnNames sht, columnNamesEnd If' 插入數據InsertDataIntoSheet sht, CStr(line) ' 強制轉換為字符串類型End IfNext lineMsgBox "Data imported successfully!", vbInformation
End SubFunction ReadFileContent(filePath As String) As StringDim fileNumber As IntegerDim content As StringfileNumber = FreeFileOpen filePath For Input As fileNumbercontent = Input(LOF(fileNumber), fileNumber)Close fileNumberReadFileContent = content
End FunctionFunction ExtractTableName(ByVal sqlLine As String) As String ' 明確指定參數類型Dim startPos As IntegerDim endPos As IntegerstartPos = InStr(sqlLine, "insert into") + Len("insert into ")endPos = InStr(startPos, sqlLine, " (")ExtractTableName = Trim(Mid(sqlLine, startPos, endPos - startPos))
End FunctionFunction ExtractColumnNames(ByVal sqlLine As String) As StringDim startPos As IntegerDim endPos As IntegerstartPos = InStr(sqlLine, "(") + 1endPos = InStr(sqlLine, ") values")ExtractColumnNames = Trim(Mid(sqlLine, startPos, endPos - startPos))
End FunctionSub InsertColumnNames(sht As Worksheet, columnNames As String)Dim columns As Variantcolumns = Split(columnNames, ",")With shtDim i As IntegerFor i = LBound(columns) To UBound(columns).Cells(1, i + 1).Value = Trim(columns(i))Next iEnd With
End SubSub InsertDataIntoSheet(sht As Worksheet, ByVal sqlLine As String) ' 明確指定參數類型Dim valuesStartPos As IntegerDim valuesEndPos As IntegerDim values As StringDim data As VariantvaluesStartPos = InStr(sqlLine, "values (") + Len("values (")valuesEndPos = InStr(valuesStartPos, sqlLine, ");")values = Mid(sqlLine, valuesStartPos, valuesEndPos - valuesStartPos)data = Split(values, ",")' 去掉單引號并插入數據到工作表中With shtDim nextRow As LongnextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1Dim i As IntegerFor i = LBound(data) To UBound(data).Cells(nextRow, i + 1).Value = Replace(Trim(data(i)), "'", "")Next iEnd With
End Sub

🍀
晚安咯
peace
加油

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

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

相關文章

element-ui封裝分頁組件:實現首頁、上一頁、下一頁、末頁、跳轉按鈕

首頁、上一頁、下一頁、末頁、跳轉按鈕 因為el-pagination只有一個插槽,所以通過兩個el-pagination插槽分別加入首頁、末頁按鈕,再拼接這兩個el-pagination的方式來實現首頁、末頁按鈕跳轉按鈕不用加事件,如果el-pagination修改了前往的頁數…

【work】AI八股-神經網絡相關

Deep-Learning-Interview-Book/docs/深度學習.md at master amusi/Deep-Learning-Interview-Book GitHub 網上相關總結: 小菜雞寫一寫基礎深度學習的問題(復制大佬的,自己復習用) - 知乎 (zhihu.com) CV面試問題準備持續更新貼 …

VOI(Virtual Operating System Infrastructure,虛擬操作系統基礎架構)

VOI(Virtual Operating System Infrastructure,虛擬操作系統基礎架構)架構在桌面虛擬化領域具有其獨特的優勢,使得它在某些場景下表現尤為出色。以下是幾個具體場景: 1. 重載性能需求場景 表現: 高效利用…

聚類分析方法(二)

目錄 三、層次聚類方法(一)層次聚類策略(二)AGNES算法(三)DIANA算法 四、密度聚類方法(一)基本概念(二)算法描述(三)計算實例&#xf…

Google賬號輸入用戶名和密碼后提醒要到手機通知點是,還要點擊數字,但是我手機收不到

有一些朋友換了一個新的電腦后手機登錄谷歌賬號時,用戶名和密碼都正確輸入以后,第三步彈出一個提示,要在手機上的通知欄點擊是,并且點擊手機上相應的數字才能繼續登錄。 但是自己的手機上下拉通知欄卻沒有來自谷歌的通知&#xf…

ADOQuery 查詢MSSQL存儲過程一個莫名其妙的錯誤;

在 SSMS 中執行完成正常的的存儲過程。 也能正常的返回想要的數據,,然后通過 ADO 查詢時,總是提法 某 字段不存在的問題; 此問題困擾了一天。 例如(當然,實際數據結構比下面舉例的復雜)&…

C++八股(二)之C++11新特性

一、C++11有什么新特性?? 自動類型推導(Type Inference):引入了 auto 關鍵字,允許編譯器根據初始化表達式的類型自動推導變量的類型。統一的初始化語法(Uniform Initialization Syntax):引入了用花括號 {} 進行初始化的統一語法,可以用于初始化各種類型的對象,包括基…

符號同步、定時同步和載波同步

符號同步、定時同步和載波同步是通信系統中重要的同步技術,它們各自承擔著不同的功能和作用。以下是對這三種同步技術的詳細解釋: 符號同步 定義: 符號同步,也稱為定時恢復或時鐘恢復,是指在數字通信系統中&#xff…

繼承關系中的訪問控制

繼承關系中的訪問控制 類中成員的訪問權限類繼承中的訪問權限派生類向基類轉換的權限問題(向上轉型)友元在繼承中的訪問權限 類中成員的訪問權限 public:類的對象(外部)可以訪問,派生類也可以訪問protecte…

LeNet原理及代碼實現

目錄 1.原理及介紹 2.代碼實現 2.1model.py 2.2model_train.py 2.3model.test.py 1.原理及介紹 2.代碼實現 2.1model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__…

nuxt、vue樹形圖d3.js

直接上代碼 //安裝 npm i d3 --save<template><div class"d3"><div :id"id" class"d3-content"></div></div> </template> <script> import * as d3 from "d3";export default {props: {d…

Github Actions 構建Vue3 + Vite項目

本篇文章以自己創建的項目為例&#xff0c;用Github Actions構建。 Github地址&#xff1a;https://github.com/ling08140814/myCarousel 訪問地址&#xff1a;https://ling08140814.github.io/myCarousel/ 具體步驟&#xff1a; 1、創建一個Vue3的項目&#xff0c;并完成代…

接口基礎知識1:認識接口

課程大綱 一、定義 接口&#xff1a;外部與系統之間、內部各子系統之間的交互點。 比如日常使用的電腦&#xff0c;有電源接口、usb接口、耳機接口、顯示器接口等&#xff0c;分別可以實現&#xff1a;與外部的充電、文件數據傳輸、聲音輸入輸出、圖像輸入輸出等功能。 接口的本…

262個地級市-市場潛力指數(do文件+原始文件)

全國262個地級市-市場潛力指數&#xff08;市場潛力計算方法代碼數據&#xff09;_市場潛力數據分析資源-CSDN文庫 市場潛力指數&#xff1a;洞察未來發展的指南針 市場潛力指數是一個綜合性的評估工具&#xff0c;它通過深入分析市場需求、競爭環境、政策支持和技術創新等多個…

面向字節流傳輸數據

當提到“傳輸數據面向字節流”&#xff0c;這是指在網絡通信中&#xff0c;數據被視作一連串的無結構字節&#xff0c;而不是按照特定的數據塊或記錄進行傳輸。這種傳輸方式是面向傳輸層協議&#xff08;如TCP&#xff09;的一個特性&#xff0c;它允許數據以連續的字節流形式在…

phpstudy框架,window平臺,如何開端口給局域網訪問?

Windows平臺上使用phpstudy框架開端口給同事訪問&#xff0c;主要涉及到幾個步驟&#xff1a;查看并確認本機IP地址、配置phpstudy及網站項目、開放防火墻端口以及確保同事能夠通過局域網訪問。以下是詳細的步驟說明&#xff1a; 1. 查看并確認本機IP地址 首先&#xff0c;需…

SQLAlchemy pool_pre_ping

pool_pre_ping 是 SQLAlchemy 中 create_engine 函數的一個參數&#xff0c;它用于配置連接池的行為。當設置為 True 時&#xff0c;pool_pre_ping 啟用了連接池在每次從池中取出&#xff08;即“簽出”或“checkout”&#xff09;連接之前&#xff0c;先測試該連接是否仍然活躍…

(2)滑動窗口算法練習:無重復字符的最長子串

無重復字符的最長子串 題目鏈接&#xff1a;3. 無重復字符的最長子串 - 力扣&#xff08;LeetCode&#xff09; 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的最長子串的長度。 輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是"a…

mov視頻怎么改成mp4?把mov改成MP4的四個方法

mov視頻怎么改成mp4&#xff1f;選擇合適的視頻格式對于確保內容質量和流通性至關重要。盡管蘋果公司的mov格式因其出色的視頻表現備受贊譽&#xff0c;但在某些情況下&#xff0c;它并非最佳選擇&#xff0c;因為使用mov格式可能面臨一些挑戰。MP4格式在各種設備&#xff08;如…

構造二進制字符串

目錄 LeetCode3221 生成不含相鄰零的二進制字符串 #include <iostream> #include <vector> using namespace std;void dfs(string s,int n,vector<string>& res){if(s.size()n){res.push_back(s);return;}dfs(s"0",n,res);dfs(s"1"…