0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellで

$Catalog = New-Object -ComObject ADOX.Catalog
$workCon = New-Object -ComObject ADODB.Connection
# $workRS = New-Object -ComObject ADODB.Recordset

### Set Provider
#$JETOLEDB4 = "Microsoft.Jet.OLEDB.4.0"
$ACEOLEDB12 = "Microsoft.ACE.OLEDB.12.0"
#$ACEOLEDB16 = "Microsoft.ACE.OLEDB.16.0"

### set table type
$Excel_120Xml = "Excel 12.0 Xml"
$Excel_80 = "Excel 8.0"
$AccessDB = ""
$IMEX1 = "IMEX=1"
$IMEX0 = "IMEX=0"

$CurrentTime = Get-Date -Format "yyyyMMdd_HHmmss"

########## work databaase setting
### Set work Database table
$myAddress = Split-Path $MyInvocation.MyCommand.Path -Parent
$workDBaddress = Split-Path $myAddress -Parent
# $workDBfile = "WorkDB_$dateTimeString.accdb"
$workDBfile = "WorkDB.accdb"
$workDBpath = "$workDBaddress\$workDBfile"
$workTableType = $AccessDB
$workTable = "work"

### set connection string for work database
$connectionString = "Provider=$ACEOLEDB12;Data Source=$workDBpath"

### create a work database file when it is nothing
if ((Test-Path $workDBpath) -eq $false){        # ワークデータベースが無い場合は作成する
   $workDB = $Catalog.Create($connectionString)
   $workDB.close()
} else {
   $Catalog.ActiveConnection = $connectionString
   foreach($table in $Catalog.Tables) {
      if (($table.type -eq "TABLE") -And ($table.Name -eq $workTable)) {
         $Catalog.Tables.Delete($workTable)
      }
   }
}

###  connection to work database
$workCon.Open($connectionString)
$errorCount = 0

########## source databaase setting
$sourceDBaddress = "$workDBaddress\01_Source\身長・体重"

# SourceData Site:
# https://www.e-stat.go.jp/stat-search/database?page=1&toukei=00400002&tstat=000001011648
# SourceData Excel File:
# https://www.e-stat.go.jp/stat-search/file-download?statInfId=000040120030&fileKind=0
$sourceDBfile = "r4_hoken_tokei_05.xlsx"
$sourceDBpath = "$sourceDBaddress\$sourceDBfile"
# $sourceTableType = "$Excel_120Xml;HDR=NO;$IMEX1"
$sourceTableType = "$Excel_120Xml;HDR=NO;"
$sourceTable = "05-"
$sourceRange = "`$A8:J"

########## destination databaase setting
$destinationDBaddress = $sourceDBaddress
$destinationDBfile = "result_$CurrentTime.xlsx"
$destinationDBpath = "$destinationDBaddress\$destinationDBfile"
$destinationTableType = $Excel_120Xml
$destinationTable = "result"
$destinationRange = "`$A:J"

### set select columns
$columns = @"
'Age歳' AS 年齢, F2 AS [区分], Val(F3) AS [男身長平均値(cm)], Val(F4) AS [男身長標準偏差(cm)], Val(F5) AS [男体重平均値(kg)], Val(F6) AS [男体重標準偏差(kg)], Val(F7) AS [女身長平均値(cm)], Val(F8) AS [女身長標準偏差(cm)], Val(F9) AS [女体重平均値(kg)], Val(F10) AS [女体重標準偏差(kg)]
"@
# $columns ="*"

### set extract condition
$ExtractCondition = "IsNumeric(F3)"
# $ExtractCondition = ""

##===================================================
function SQL_execute {
   param (
   [string] $SQLstr,
   [bool] $errorView=$True,
   [Bool] $exit_exception=$True
   )

   $SQLstr = $SQLstr.replace('\\','/')                            # Directoryの区切り文字を置換 '¥' -> '/'
   $SQLstr = $SQLstr.replace('@YYYYMMDD_HHMMSS@', $CurrentTime)   # SQL分に含まれる'@YYYYMMDD_HHMMSS@'を日時の数値に置換
   $SQLstr = $SQLstr + ';'

   $SQLstr
   try {
      $workCon.Execute($SQLstr)
      # time.sleep(0.1)
   } catch {
      $errorCount += 1
      if ($errorView) {
         'xxxxxxxxxxxxxxxxxxx ★★★ Execute Failure ! xxxxxxxxxxxxxxxxxxxxxxxxx'
         $_.Exception.Message
      }    
      if ($exit_exception) {
         'Error Count = ' + $errorCount
         return
      }
   } finally {
      'Execute Successful !! V(^_^)V'
   }
}

######################################################
### create execute SQL string
for ($i = 1; $i -lt 14; $i++) {
   $SubNo = $i.ToString("000")
   $SQLstring  = "SELECT " + $columns.replace("Age", $i + 4)
   if ($i -eq 1) {
      $SQLstring += " INTO [$destinationTableType;Database=$destinationDBpath].[$destinationTable]"
      $SQLstring += " FROM [$sourceTableType;Database=$sourceDBpath].[$sourceTable$SubNo$sourceRange]"
   } else {
      $SQLstring = "INSERT INTO [$destinationTableType;Database=$destinationDBpath].[$destinationTable] $SQLstring"
      $SQLstring += " FROM [$sourceTableType;Database=$sourceDBpath].[$sourceTable$SubNo$sourceRange]"
   }

   if ($ExtractCondition -ne "") {
      $SQLstring += " WHERE $ExtractCondition" 
   }
   SQL_execute($SQLstring)
}

$workCon.close()

'Error Count = ' + $errorCount
######################################################
### Excel でファイルを開く
$xlApp = New-Object -ComObject Excel.Application
$xlApp.Visible = $true
$xlApp.DisplayAlerts = $true
$Workbook = $xlApp.Workbooks.Open($destinationDBpath)
$wSht = $Workbook.Worksheets($destinationTable)
$wSht.Select()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?