excel - 在 Powershell 中读取 Excel 工作表

标签 excel powershell

下面的脚本读取 Excel 文档的工作表名称...

我如何改进它,以便它可以提取每个工作表中 B 列的所有内容(从第 5 行开始 - 因此第 1-4 行被忽略)并创建一个对象?

例如如果工作表 1 中的 B 列(称为伦敦)具有以下值:

Marleybone
Paddington
Victoria
Hammersmith

工作表 2 中的 C 列(称为诺丁汉)具有以下值:

Alverton 
Annesley
Arnold
Askham

我想创建一个如下所示的对象:

City,Area
London,Marleybone
London,Paddington
London,Victoria
London,Hammersmith
Nottingham,Alverton 
Nottingham,Annesley
Nottingham,Arnold
Nottingham,Askham

这是我到目前为止的代码:

clear all

sheetname = @()

    $excel=new-object -com excel.application
    $wb=$excel.workbooks.open("c:\users\administrator\my_test.xls")
    for ($i=1; $i -le $wb.sheets.count; $i++)
    {
      $sheetname+=$wb.Sheets.Item($i).Name;
    }

$sheetname

最佳答案

这假设内容位于每张工作表的 B 列中(因为不清楚如何确定每张工作表上的列。)并且该列的最后一行也是工作表的最后一行。

$xlCellTypeLastCell = 11 
$startRow = 5 
$col = 2 

$excel = New-Object -Com Excel.Application
$wb = $excel.Workbooks.Open("C:\Users\Administrator\my_test.xls")

for ($i = 1; $i -le $wb.Sheets.Count; $i++)
{
    $sh = $wb.Sheets.Item($i)
    $endRow = $sh.UsedRange.SpecialCells($xlCellTypeLastCell).Row
    $city = $sh.Cells.Item($startRow, $col).Value2
    $rangeAddress = $sh.Cells.Item($startRow + 1, $col).Address() + ":" + $sh.Cells.Item($endRow, $col).Address()
    $sh.Range($rangeAddress).Value2 | foreach 
    {
        New-Object PSObject -Property @{ City = $city; Area = $_ }
    }
}

$excel.Workbooks.Close()

关于excel - 在 Powershell 中读取 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211632/

相关文章:

PowerShell 脚本在本地运行,但远程出错

java - 以编程方式获取 DFS/UNC 信息 - Java

excel - 如何覆盖动态编写的控件的 control_Change 事件?

SQL-Server 用 NULL 值替换空单元格

excel - 以 0.25 步长值循环

powershell - 测试Outlook是否在后台运行或可见

Excel VBA 下拉列表,带有多个选择的依赖列表

java - 从 Java 生成动态 Excel

.net - 如何在不生成 msbuild.exe 进程的情况下从 Powershell 运行 MSBuild?

forms - 在不使用 'Invoke-WebRequest' 的情况下发布 HTTP 表单