|
- # Define file paths
- $excelFilePath = "C:\Users\danielc\Desktop\Changed Addrs12.xlsx"
- $accessDbPath = "\\kci-app01\c$\inetpub\Data\webdata - Copy.mdb"
- $tableName = "Jurisdiction"
-
- # Open Excel file
- $excel = New-Object -ComObject Excel.Application
- $excel.Visible = $false # Set to $true if you want to see Excel open
-
- $workbook = $excel.Workbooks.Open($excelFilePath)
- $sheet = $workbook.Sheets.Item(1)
-
- # Get Excel range
- $usedRange = $sheet.UsedRange
- $rowCount = $usedRange.Rows.Count
- $colCount = $usedRange.Columns.Count
-
- Write-Host "Total Rows: $rowCount, Total Columns: $colCount"
-
- # Retrieve column headers (first row) & trim spaces
- $headers = @()
- for ($col = 1; $col -le $colCount; $col++)
- {
- $headers += ($sheet.Cells.Item(1, $col).Text).Trim()
- }
-
- # Print headers for debugging
- Write-Host "Excel Headers Found: $($headers -join ', ')"
-
- # Ensure necessary columns exist
- $jcodeIndex = $headers.IndexOf("Jurisdiction Code")
- $newAddIndex = $headers.IndexOf("New Add")
- $newCityIndex = $headers.IndexOf("New city")
- $newZipIndex = $headers.IndexOf("New Zip")
-
- if ($jcodeIndex -eq -1 -or $newAddIndex -eq -1 -or $newCityIndex -eq -1 -or $newZipIndex -eq -1)
- {
- Write-Error "One or more required columns (Jurisdiction Code, New Add, New City, New Zip) not found in Excel."
- $workbook.Close($false)
- $excel.Quit()
- exit
- }
-
- # Open Access Database
- $connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$accessDbPath;"
- $conn = New-Object -ComObject ADODB.Connection
-
- try
- {
- $conn.Open($connectionString)
- Write-Host "Connected to Access Database: $accessDbPath"
-
- # Iterate through Excel rows and generate SQL updates
- for ($row = 2; $row -le $rowCount; $row++)
- {
- # Read Jurisdiction Code and ensure zero-padded format
- $rawJurisdictionCode = $sheet.Cells.Item($row, $jcodeIndex + 1).Text
- if ($rawJurisdictionCode -match "^\d+$")
- {
- $jurisdictionCode = "{0:D5}" -f [int]$rawJurisdictionCode
- }
- else
- {
- Write-Host "Skipping row $row Invalid Jurisdiction Code '$rawJurisdictionCode'"
- continue
- }
-
- # Read new address fields from Excel
- $newAdd = $sheet.Cells.Item($row, $newAddIndex + 1).Text
- $newCity = $sheet.Cells.Item($row, $newCityIndex + 1).Text
- $newZip = $sheet.Cells.Item($row, $newZipIndex + 1).Text
-
- # Generate CSZ (keeping the "-" in ZIP code)
- $csz = "$newCity $newZip"
-
- # Remove "-" from ZIP code for IMB_Digits
- $cleanZip = $newZip -replace "-", ""
- $imbDigits = "00778903419785000000$cleanZip"
-
- if (-not $newAdd -and -not $newCity -and -not $newZip)
- {
- Write-Host "Skipping row $row No updates found for Mailing_Address, CSZ, IMB, or IMB_Digits."
- continue
- }
-
- # Make API call to get IMB value
- $apiUrl = "https://postalpro.usps.com/ppro-tools-api/imb/encode?imb=$imbDigits"
- try
- {
- $response = Invoke-RestMethod -Uri $apiUrl -Method Get -Headers @{ "Accept" = "application/json" }
- $imbValue = $response.imb
- }
- catch
- {
- Write-Host "Error retrieving IMB for row $row (Jurisdiction Code: $jurisdictionCode), using fallback IMB_Digits."
- $imbValue = $imbDigits
- }
-
- # Escape SQL values
- $newAddEscaped = $newAdd -replace "'", "''"
- $cszEscaped = $csz -replace "'", "''"
- $imbDigitsEscaped = $imbDigits -replace "'", "''"
- $imbValueEscaped = $imbValue -replace "'", "''"
-
- # Generate SQL Update statement
- $updateSQL = "UPDATE [$tableName] SET [Mailing_Address] = '$newAddEscaped', [CSZ] = '$cszEscaped', [IMB] = '$imbValueEscaped', [IMB_Digits] = '$imbDigitsEscaped' WHERE [JCode] = '$jurisdictionCode';"
- Write-Host "Executing: $updateSQL"
-
- # Execute the SQL Update
- $cmd = $conn.Execute($updateSQL)
- }
-
- }
- catch
- {
- Write-Error "Error updating Access database: $_"
- }
- finally
- {
- # Close the Access database
- $conn.Close()
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($conn) | Out-Null
- }
-
- # Close Excel
- $workbook.Close($false)
- $excel.Quit()
-
- # Release COM objects
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) | Out-Null
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
-
- Write-Host "Excel and Access database update completed."
|