update
This commit is contained in:
@@ -89,8 +89,10 @@ Private Sub DO_CSV_Import(ws As Excel.Worksheet)
|
||||
Dim colLetters As Variant: colLetters = cfg("HeaderColumns")
|
||||
Dim writeRow As Long: writeRow = cfg("StartRow")
|
||||
Dim i As Long
|
||||
' loop row
|
||||
For i = LBound(csvData, 1) To UBound(csvData, 1)
|
||||
Dim j As Long
|
||||
' loop column
|
||||
For j = 0 To expectedColumnCount - 1
|
||||
ws.Cells(writeRow, ws.Range(colLetters(j) & "1").Column).Value = CleanCSVField(CStr(csvData(i, j + 1)))
|
||||
Next j
|
||||
@@ -181,13 +183,19 @@ Private Sub DO_CSV_Export(ws As Excel.Worksheet)
|
||||
|
||||
' === Step 4: Count data columns ===
|
||||
Dim expectedColumnCount As Long: expectedColumnCount = sheetConf("ExpectedColumnCount")
|
||||
Dim outputArr As Variant
|
||||
ReDim outputArr(1 To rowCount + 1, 1 To expectedColumnCount)
|
||||
|
||||
' === Step 5: check export csv has header ===
|
||||
Dim hasHeader As Boolean: hasHeader = sheetConf("HasHeader")
|
||||
Dim dataRow As Long: dataRow = 1
|
||||
Dim outputArr As Variant
|
||||
|
||||
' when has header + 1
|
||||
If hasHeader Then
|
||||
ReDim outputArr(1 To rowCount + 1, 1 To expectedColumnCount)
|
||||
Else
|
||||
ReDim outputArr(1 To rowCount, 1 To expectedColumnCount)
|
||||
End If
|
||||
|
||||
' === Step 6: Build array with header and data ===
|
||||
If hasHeader Then
|
||||
Dim headerArr As Variant
|
||||
|
||||
@@ -7,9 +7,6 @@ Option Explicit
|
||||
' - GetLastDataRowInRange
|
||||
' - ClearDataRows
|
||||
' - ClearDataRow
|
||||
' - SortDataRows
|
||||
' - ToggleAutoFilter
|
||||
' - AutoFitColumnWidth
|
||||
' ============================================================
|
||||
|
||||
' Common Functions
|
||||
@@ -247,48 +244,13 @@ Sub ClearDataRows(ByVal ws As Worksheet)
|
||||
clearRange.ClearContents
|
||||
clearRange.Interior.Color = vbWhite
|
||||
|
||||
Dim clearErrorRange As Range
|
||||
Set clearErrorRange = ws.Range(ws.Cells(startRow, ws.Range(errorCol & "1").Column), ws.Cells(lastDataRow, ws.Range(errorCol & "1").Column))
|
||||
clearErrorRange.ClearContents
|
||||
clearErrorRange.Interior.Color = vbWhite
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub SortDataRows(Optional ByVal sortColumn As Long = 3)
|
||||
Dim ws As Worksheet
|
||||
Dim lastRow As Long
|
||||
Dim startRow As Long
|
||||
Dim sortOrder As Long
|
||||
|
||||
Set ws = ActiveSheet
|
||||
startRow = 7
|
||||
lastRow = GetLastDataRow(ws, sortColumn)
|
||||
|
||||
If lastRow < startRow Then
|
||||
MsgBox "No data to sort.", vbExclamation
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
' Determine sort order based on first row's current state
|
||||
Dim currentFirst As String
|
||||
Dim nextFirst As String
|
||||
currentFirst = Trim(ws.Cells(startRow, sortColumn).Value)
|
||||
nextFirst = Trim(ws.Cells(startRow + 1, sortColumn).Value)
|
||||
|
||||
If currentFirst <> "" And nextFirst <> "" Then
|
||||
If currentFirst > nextFirst Then
|
||||
sortOrder = xlAscending
|
||||
Else
|
||||
sortOrder = xlDescending
|
||||
If errorCol <> "" Then
|
||||
Dim clearErrorRange As Range
|
||||
Set clearErrorRange = ws.Range(ws.Cells(startRow, ws.Range(errorCol & "1").Column), ws.Cells(lastDataRow, ws.Range(errorCol & "1").Column))
|
||||
clearErrorRange.ClearContents
|
||||
clearErrorRange.Interior.Color = vbWhite
|
||||
End If
|
||||
Else
|
||||
sortOrder = xlAscending
|
||||
End If
|
||||
|
||||
ws.Range(ws.Cells(startRow, 1), ws.Cells(lastRow, 20)).Sort _
|
||||
Key1:=ws.Cells(startRow, sortColumn), _
|
||||
Order1:=sortOrder, _
|
||||
Header:=xlNo
|
||||
End Sub
|
||||
|
||||
' Format: code:value (no space around colon)
|
||||
|
||||
@@ -488,7 +488,7 @@ Private Sub RefreshSheetDict()
|
||||
sheetConf("CSV_Encoding") = "utf-8"
|
||||
sheetConf("HasHeader") = False
|
||||
sheetConf("ExpectedColumnCount") = 4
|
||||
sheetConf("HeaderColumns") = Array()
|
||||
sheetConf("HeaderColumns") = Array("C", "D", "E", "F")
|
||||
sheetConf("AlwaysQuote") = True
|
||||
sheetConf("FilterRow") = 5
|
||||
Set sheetConfDict("O1") = sheetConf
|
||||
@@ -504,7 +504,7 @@ Private Sub RefreshSheetDict()
|
||||
sheetConf("CSV_Encoding") = "utf-8"
|
||||
sheetConf("HasHeader") = False
|
||||
sheetConf("ExpectedColumnCount") = 13
|
||||
sheetConf("HeaderColumns") = Array()
|
||||
sheetConf("HeaderColumns") = Array("C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O")
|
||||
sheetConf("AlwaysQuote") = True
|
||||
sheetConf("FilterRow") = 5
|
||||
sheetConf("KeyCol") = 3
|
||||
|
||||
Reference in New Issue
Block a user