From 1b2cdf854bb2a10b6e952bc9f72b694111dad5f6 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Fri, 29 Sep 2017 11:40:14 -0400 Subject: [PATCH] add functions to turn column number into letter, range to transposed string array, and build string array into sql values --- FL.bas | 12 ++++++ TheBigOne.cls | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) diff --git a/FL.bas b/FL.bas index e41864f..3cc10f1 100644 --- a/FL.bas +++ b/FL.bas @@ -613,3 +613,15 @@ Sub markdown_whole_sheet() End Sub + + + +Sub sql_from_range() + + Dim x As New TheBigOne + Dim wapi As New Windows_API + Dim r() As String + + Call wapi.ClipBoard_SetData(x.SQLp_build_sql_values(x.ARRAYp_get_range_string(Selection), False)) + +End Sub diff --git a/TheBigOne.cls b/TheBigOne.cls index 0677526..5dd1bb9 100644 --- a/TheBigOne.cls +++ b/TheBigOne.cls @@ -2161,3 +2161,110 @@ Function markdown_whole_sheet(ByRef sh As Worksheet) As String markdown_whole_sheet = Me.markdown_from_table(tbl) End Function + +Function MISCe_colnum_to_letter(ByRef x As Long) As String + + If x > 26 Then + MISCe_colnum_to_letter = Chr(x \ 26 + 64) & Chr((x / 26 - x \ 26) * 26 + 64) + Else + MISCe_colnum_to_letter = Chr(x + 64) + End If + +End Function + +Public Function SQLp_build_sql_values(ByRef tbl() As String, trim As Boolean) As String + + + Dim i As Long + Dim j As Long + Dim sql As String + Dim rec As String + Dim type_flag() As String + + ReDim type_flag(UBound(tbl, 1)) + For j = 0 To UBound(tbl, 1) + If IsNumeric(tbl(j, 1)) Then + If InStr(1, tbl(j, 1), ".") > 0 Then + type_flag(j) = "N" + Else + type_flag(j) = "S" + End If + Else + If IsDate(tbl(j, 1)) Then + type_flag(j) = "D" + Else + type_flag(j) = "S" + End If + End If + Next j + + + For i = 1 To UBound(tbl, 2) + rec = "" + If i <> 1 Then sql = sql & "," & vbCrLf + rec = rec & "(" + For j = 0 To UBound(tbl, 1) + If j <> 0 Then rec = rec & "," + Select Case type_flag(j) + Case "N" '-------N = numeric but should probably be N for numeric---- + If tbl(j, i) = "" Then + rec = rec & "NULL" + Else + rec = rec & Replace(tbl(j, i), "'", "''") + End If + Case "S" '-------S = string------------------------------------------ + If trim Then + rec = rec & "'" & LTrim(RTrim(Replace(tbl(j, i), "'", "''"))) & "'" + Else + rec = rec & "'" & Replace(tbl(j, i), "'", "''") & "'" + End If + Case "D" '-------D = date--------------------------------------------- + If LTrim(RTrim(tbl(j, i))) = "" Then + rec = rec & "CAST(NULL AS DATE)" + Else + rec = rec & "'" & tbl(j, i) & "'" + End If + Case Else '-------Assume text------------------------------------------ + If trim Then + rec = rec & "'" & LTrim(RTrim(Replace(tbl(j, i), "'", "''"))) & "'" + Else + rec = rec & "'" & Replace(tbl(j, i), "'", "''") & "'" + End If + End Select + Next j + rec = rec & ")" + sql = sql & rec + Next i + + SQLp_build_sql_values = sql + +End Function + +Public Function ARRAYp_get_range_string(ByRef r As range) As String() + + Dim i As Long + Dim j As Long + Dim t1() As Variant + Dim t2() As String + + t1 = r + + '---convert to 0 lower bound array---- + + ReDim t2(UBound(t1, 1) - 1, UBound(t1, 2) - 1) + + + For i = 1 To UBound(t1, 1) + For j = 1 To UBound(t1, 2) + t2(i - 1, j - 1) = CStr(t1(i, j)) + Next j + Next i + + Call Me.ARRAYp_Transpose(t2) + + ARRAYp_get_range_string = t2 + + + + +End Function \ No newline at end of file