简体   繁体   English

使用Powershell从xls文件在每行的SQL Server上显示数据

[英]Display data on SQL Server of each row from an xls file by using powershell

I'm new to PowerShell. 我是PowerShell的新手。 Please help me on how to achieve the following: display data on SQL Server of each row from an xls file by using PowerShell. 请帮助我实现以下目标:使用PowerShell在xls文件的每行的SQL Server上显示数据。

read xls > powershell > sql server

Below is the code I've created so far but turns out only one row of data is displayed in database. 以下是我到目前为止创建的代码,但结果表明数据库中仅显示一行数据。 How do I loop the output of each row? 如何循环输出每一行?

$filepath = "C:\Source\AandPrates.xls"

#object to open excel workbook
$excel= New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open($filepath)
$worksheet = $workbook.Worksheets.Item(1)
$startRow = 4

#create system.datatable
#read xls file line by line and display on powershell
$dt = New-Object "System.Data.DataTable"
[void]$dt.Columns.Add("Currency Name",
  [System.Type]::GetType("System.String"))
[void]$dt.Columns.Add("ISO Code",
  [System.Type]::GetType("System.String"))
[void]$dt.Columns.Add("Accounting Rates",
  [System.Type]::GetType("System.String"))
[void]$dt.Columns.Add("Base Currency",
  [System.Type]::GetType("System.String"))
Do {
    $ColValues1 = $worksheet.Cells.Item($startRow,1).Value()
    $ColValues2 = $worksheet.Cells.Item($startRow,2).Value()
    $ColValues3 = $worksheet.Cells.Item($startRow,3).Value()
    $ColValues4 = $worksheet.Cells.Item($startRow,4).Value()
    $startRow++
    $dt.Rows.Add($ColValues1,$ColValues2,$ColValues3,$ColValues4)
   }
   while ($worksheet.Cells.Item($startRow,1).Value() -ne $null)

$name = $ColValues1
$code = $ColValues2
$rates = $ColValues3
$currency = $ColValues4

$Excel.Quit()

#Connect to the SQL database
$Conn = New-Object System.Data.SqlClient.SqlConnection
$Conn.ConnectionString = "Server=5CG61730W6\SQLEXPRESS;Database=shamsuli;trusted_connection=true;"
$Conn.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Conn

#insert the output from powershell into sql server
$output | foreach {
 $Command.CommandText = "INSERT INTO dbo.MyTable (Name,Code,Rates,Currency) VALUES (@Name, @Code, @Rates, @Currency)"
 $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Name", $name)));
 $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Code", $code)));
 $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Rates", $rates)));
 $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Currency", $currency)));
 $Command.ExecuteNonQuery() | out-null
}

$Conn.Close()

I already get the answer for my question. 我已经得到了我问题的答案。 Thanks btw. 谢谢顺便说一句。 :) :)

$filepath = "C:\Source\AandPrates.xls"

#object to open excel workbook
$excel= New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open($filepath)
$worksheet = $workbook.Worksheets.Item(1)
$startRow = 2

#create system.datatable
$dt = New-Object "System.Data.DataTable"
[void]$dt.Columns.Add("Currency Name",
  [System.Type]::GetType("System.String"))
[void]$dt.Columns.Add("ISO Code",
  [System.Type]::GetType("System.String"))
[void]$dt.Columns.Add("Accounting Rates",
  [System.Type]::GetType("System.String"))
[void]$dt.Columns.Add("Base Currency",
  [System.Type]::GetType("System.String"))

Do {
    $name = $ColValues1
    $code = $ColValues2
    $rates = $ColValues3
    $currency = $ColValues4
    $ColValues1 = $worksheet.Cells.Item($startRow,1).Value()
    $ColValues2 = $worksheet.Cells.Item($startRow,2).Value()
    $ColValues3 = $worksheet.Cells.Item($startRow,3).Value()
    $ColValues4 = $worksheet.Cells.Item($startRow,4).Value()
    $startRow++
    $dt.Rows.Add($ColValues1,$ColValues2,$ColValues3,$ColValues4)

    #Connect to the SQL database
    $Conn = New-Object System.Data.SqlClient.SqlConnection
    $Conn.ConnectionString = "Server=5CG61730W6\SQLEXPRESS;Database=shamsuli;trusted_connection=true;"
    $Conn.Open()
    $Command = New-Object System.Data.SQLClient.SQLCommand
    $Command.Connection = $Conn


    foreach ($worksheet in $excel) {

    $Command.CommandText = "INSERT INTO dbo.MyTable1000 (Name,Code,Rates,Currency) VALUES (@Name, @Code, @Rates, @Currency)"
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Name", $name)));
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Code", $code)));
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Rates", $rates)));
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Currency", $currency)));
    $Command.ExecuteNonQuery();
    }

    $Conn.Close()

   }
   while ($worksheet.Cells.Item($startRow,1).Value() -ne $null)

$Excel.Quit()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用来自SQL Server的Excel VBA在新行中显示数据 - Display data in new row using Excel VBA from SQL Server 如何以编程方式(C#)从Xls-XML(以XML格式保存的xls文件)数据导入SQL Server - How to programmatically (C#) import from the Xls-XML(xls file Saved in XML Format) data in to SQL Server 如何使用PowerShell脚本从SQL Server中的表中删除行? - How to delete a row from a table in SQL Server using PowerShell script? 对于同一行SQL Server上的每个显示 - For Each Display on Same Row SQL Server 如何使用DNN在SQL Server表上直接加载XLS或XLSX数据文件 - How to load XLS or XLSX data file directly on a SQL Server table using DNN 将数据从XLS文件导入SQL Server 2008 R2数据库 - Import data from XLS file to SQL Server 2008 R2 database 将数据(.xls 文件)导入 SQL 服务器 - 我收到此错误 - Import data (.xls file) into SQL Server - I get this error SQL:在每行中仅显示更改的数据 - Sql: display just the changed data in each row 如何使用 Powershell 将进程信息获取到 SQL Server 表中,每个属性都在不同的行中? - How to Get process info using Powershell into a SQL Server table with each property in a different row? 使用 PowerShell 从 SQL Server 获取整行 - Fetch a whole row from SQL Server with PowerShell
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM