【问题标题】:Insert data from a dataset to an Excel table in a worksheet using powershell [closed]使用 powershell 将数据集中的数据插入工作表中的 Excel 表[关闭]
【发布时间】:2020-05-23 11:46:24
【问题描述】:

我有一个包含 3 个工作表的 Excel 文件,第三个称为“DataArea”。此工作表有一个名为“Table1”的空表,其中包含 2 列“Column1”和“Column2”。我已经从我的 SQL 服务器数据库中检索了数据,所以我在数据集中有 2 列。我的范围是将我的数据集中包含的信息插入到 excel 中的该表中,需要这样做,因为该表是第二张表中图形的来源。

有没有办法做到这一点?

提前致谢。

【问题讨论】:

  • 简单的方法是在 Excel 中创建查询并刷新数据。
  • 我知道,但我需要使用 powershell 来做到这一点。我在这里问是因为这个。我正在尝试,但就像我无法检索工作表中的表名......而且我不知道如何填写表格。
  • “但我需要使用 powershel 来做” 为什么?您甚至没有在问题中提及 powershell 要求。你只问“有没有办法做到这一点?”,@PanagiotisKanavos 会回答这个问题。如果您需要使用特定工具/语言来执行任务,请告诉我们(在问题中),解释原因,并向我们展示您编写的代码并解释为什么它不起作用。
  • 在我的问题标题中有“使用 powershell”
  • @GiuseppeLolli 为什么? Excel 已经可以做到这一点,事实上它......擅长数据加载和转换。这就是 90 年代以来数据透视表和数据透视图的工作方式。数据从查询直接加载到工作表中,数据透视表从该工作表加载数据,数据透视图显示数据透视表显示的内容。甚至还有一个向导。当用户想要加载新数据时,他们按 F9 重新加载所有内容

标签: sql-server excel powershell


【解决方案1】:

拿这个,看cmets:

Add-Type -AssemblyName Microsoft.Office.Interop.Excel


# create dummy datatable with 2 colums
$dt = New-Object System.Data.DataTable
[void]$dt.Columns.Add('Column1',[string]::empty.GetType() )
[void]$dt.Columns.Add('Column2',[string]::empty.GetType() )

#fill datatable
for( $i = 0; $i -lt 10; $i++ ) {

    $row          = $dt.NewRow()
    $row.Column1  = 'Hello' + $i.ToString()
    $row.Column2  = 'World' + $i.ToString()
    [void]$dt.Rows.Add( $row )
}

# to move a datatable to excel, it must be an n-dimensional array of objects
# move datatable to object-array:

$excelArray = New-Object 'object[,]' $dt.Rows.Count, $dt.Columns.Count

for( $i = 0; $i -lt $dt.Rows.Count; $i++ ) {
    $excelArray[$i, 0] = $dt.Rows[$i].Column1
    $excelArray[$i, 1] = $dt.Rows[$i].Column2
}

# open excel file
$excelFile = 'D:\test\emptySheet.xlsx' 

$excel                = New-Object -ComObject Excel.Application
$excel.Visible        = $true
$excel.ScreenUpdating = $true

$workbook  = $excel.Workbooks.Open( $excelFile ,$null, $false )

$ws        = $workbook.WorkSheets.item(1) 

[void]$ws.Activate()

# select range
$range = $ws.Range('A1', ([char](64 + $dt.Columns.Count)).ToString() + ($dt.Rows.Count).ToString() ) 

# copy aray to excel range
$range.Value2 = $excelArray

# save and cleanup
[void]$workbook.Save()
[void]$workbook.Close()
[void]$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

【讨论】:

  • 这太棒了!我只是意识到 powershell 出于某种原因无法检索在工作表中创建的表的名称。但是,这对我有很大帮助!谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
相关资源
最近更新 更多