我想将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 ....
答案 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"));
}
}