将SQL输出导出到Excel工作表

时间:2014-08-06 17:31:42

标签: sql excel powershell

我想将sql输出输出到excel文件,以及我给出名称的工作表,即不是“Sheet1”。我怎么开始编码呢?

下面是读取sql输出的当前代码

$sql_output = @()
while ($rdr.read()){
    $sql_output += [PSCustomObject][Ordered]@{
        Col1=$rdr.GetValue(0)
        Col2=$rdr.GetValue(1)
        Col3=$rdr.GetValue(2)
        Col4=$rdr.GetValue(3)
        Col5=$rdr.GetValue(4)
    }
    $count=$count + 1
}

然后导出到csv

$sql_output | Export-CSV "D:\Script\Network_Threat_Protection.csv" -NoTypeInfo -Append

我最终会喜欢这个powershell脚本来读取多个sql查询并将其输出到excel中的不同表单,但是让我先得到导出到excel的jist ....

2 个答案:

答案 0 :(得分:1)

Export-CSV不会生成Excel文件。它生成一个逗号分隔的文本文件,通常使用Excel将其设置为 open 。作为CSV文件,不知道多个工作表或数据集属性,如工作表名称,因为您需要使用Excel comobject(及其所有细微差别)。

以下是编写真实 Excel文件的基本示例:

$a = New-Object -com Excel.Application
$a.Visible = $True
$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)
$c.Cells.Item(1,1) = "A value in cell A1."
$b.SaveAs("C:\Scripts\Test.xls")
$a.Quit()

你要做的不是新事物。互联网上有很多脚本可以完成这项任务。 Microsoft's Script Center是查找powershell脚本的好地方。 Here is one似乎做你想做的事。

答案 1 :(得分:0)

您可以使用CPPLUS库将表格导出到Excel工作表。

private DataTable GetData(string tableName)
    {
        using (SqlConnection sqlCon = new SqlConnection(connectionString))
        {
            SqlCommand sqlCommand = new SqlCommand("SELECT * FROM " + tableName, sqlCon);
            sqlCon.Open();
            var reader = sqlCommand.ExecuteReader();

            DataTable dt = new DataTable();
            dt.Load(reader);
            return dt;
        }
    }

private void SaveExcel(DataTable dataTable, string newFile)
    {
        using (ExcelPackage pck = new ExcelPackage())
        {
            ExcelWorksheet ws = pck.Workbook.Worksheets.Add(newFile);
            ws.Cells["A1"].LoadFromDataTable(dataTable, true);
            pck.SaveAs( new System.IO.FileInfo("d:\\Export\\" + newFile + ".xlsx"));
        }
    }

Download Source