导出并在特定位置写入 CSV
Export And Write CSV In Specific Location
我被困在一个逻辑中,我有以下要求:
1- 生成多个 CSV 文件。
2- 将 CSV 文件导出到特定位置。
3- 从该位置压缩所有文件。
之前我曾问过有关单击一个按钮生成 2 个文件的问题 here。但是后来发现不是
可以从 ASP.NET 中的单个响应中获取两个文件。所以我决定压缩我的文件并下载到客户的计算机上。
但是我是在单击按钮时生成我的 CSV 文件并且我没有具体位置,所以我决定先保存我的 CSV 文件
具体位置,然后压缩文件。
下面是我生成 CSV 文件的代码:
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.IO;
using System;
using System.Configuration;
using System.IO.Packaging;
using System.Web;
namespace ExportToCsv
{
public partial class WebForm1 : System.Web.UI.Page
{
//Build the CSV file data as a Comma separated string.
string csvHeader = string.Empty;
//Build the CSV file data as a Comma separated string.
string csvDetails = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ExportCSV(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("select * from mytable-1")
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//foreach (DataRow rows in dt.Rows)
//{
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csvHeader += column.ColumnName + ' ';
}
//Add new line.
csvHeader += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
csvHeader += row[column.ColumnName].ToString().Replace(",", ";") + ' ';
}
//Add new line.
csvHeader += "\r\n";
}
//}
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvHeader);
}
}
}
using (SqlCommand cmd = new SqlCommand("select * from mytable-2")
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//foreach (DataRow rows in dt.Rows)
//{
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csvDetails += column.ColumnName + ' ';
}
//Add new line.
csvDetails += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
csvDetails += row[column.ColumnName].ToString().Replace(",", ";") + ' ';
}
//Add new line.
csvDetails += "\r\n";
}
//}
// Download the CSV file.
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=DetailSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvDetails);
Response.Flush();
Response.End();
}
}
}
}
}
}
}
我能够达到第一个要求,但无法达到第二个和第三个要求。
请帮忙。提前致谢。
我试过你的代码,你应该修改这部分代码,
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvHeader);
对此,
System.IO.File.WriteAllText("C://csvHeader.csv", csvHeader);
System.IO.File.WriteAllText 将根据您的字符串输入创建文件,在这种情况下,您的 csvHeader 和 csvDetail,你也可以改变路径"C://csvHeader.csv"到你想要的另一个指定位置。
然后在您需要在指定位置创建所有文件后,您可以使用 System.IO.Compression 压缩您创建的所有 csv,或者您可以使用外部像 Ionic Zip 这样的库,如果你有兴趣使用 Ionic Zip 库,
using (ZipFile zip = new ZipFile())
{
zip.AddFile("C://csvHeader.csv");
zip.AddFile("C://csvDetail.csv");
Response.ClearContent();
Response.ClearHeaders();
Response.AppendHeader("content-disposition", "attachment; filename=csv.zip");
zip.Save(Response.OutputStream);
}
它应该下载为 CSV 的 Zip
编辑 : 如果您没有具体位置,您可以使用Path.GetTempPath()
我被困在一个逻辑中,我有以下要求:
1- 生成多个 CSV 文件。
2- 将 CSV 文件导出到特定位置。
3- 从该位置压缩所有文件。
之前我曾问过有关单击一个按钮生成 2 个文件的问题 here。但是后来发现不是 可以从 ASP.NET 中的单个响应中获取两个文件。所以我决定压缩我的文件并下载到客户的计算机上。 但是我是在单击按钮时生成我的 CSV 文件并且我没有具体位置,所以我决定先保存我的 CSV 文件 具体位置,然后压缩文件。
下面是我生成 CSV 文件的代码:
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.IO;
using System;
using System.Configuration;
using System.IO.Packaging;
using System.Web;
namespace ExportToCsv
{
public partial class WebForm1 : System.Web.UI.Page
{
//Build the CSV file data as a Comma separated string.
string csvHeader = string.Empty;
//Build the CSV file data as a Comma separated string.
string csvDetails = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ExportCSV(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("select * from mytable-1")
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//foreach (DataRow rows in dt.Rows)
//{
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csvHeader += column.ColumnName + ' ';
}
//Add new line.
csvHeader += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
csvHeader += row[column.ColumnName].ToString().Replace(",", ";") + ' ';
}
//Add new line.
csvHeader += "\r\n";
}
//}
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvHeader);
}
}
}
using (SqlCommand cmd = new SqlCommand("select * from mytable-2")
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//foreach (DataRow rows in dt.Rows)
//{
foreach (DataColumn column in dt.Columns)
{
//Add the Header row for CSV file.
csvDetails += column.ColumnName + ' ';
}
//Add new line.
csvDetails += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
//Add the Data rows.
csvDetails += row[column.ColumnName].ToString().Replace(",", ";") + ' ';
}
//Add new line.
csvDetails += "\r\n";
}
//}
// Download the CSV file.
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=DetailSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvDetails);
Response.Flush();
Response.End();
}
}
}
}
}
}
}
我能够达到第一个要求,但无法达到第二个和第三个要求。
请帮忙。提前致谢。
我试过你的代码,你应该修改这部分代码,
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt");
Response.Charset = "";
Response.ContentType = "application/text";
Response.Output.Write(csvHeader);
对此,
System.IO.File.WriteAllText("C://csvHeader.csv", csvHeader);
System.IO.File.WriteAllText 将根据您的字符串输入创建文件,在这种情况下,您的 csvHeader 和 csvDetail,你也可以改变路径"C://csvHeader.csv"到你想要的另一个指定位置。
然后在您需要在指定位置创建所有文件后,您可以使用 System.IO.Compression 压缩您创建的所有 csv,或者您可以使用外部像 Ionic Zip 这样的库,如果你有兴趣使用 Ionic Zip 库,
using (ZipFile zip = new ZipFile())
{
zip.AddFile("C://csvHeader.csv");
zip.AddFile("C://csvDetail.csv");
Response.ClearContent();
Response.ClearHeaders();
Response.AppendHeader("content-disposition", "attachment; filename=csv.zip");
zip.Save(Response.OutputStream);
}
它应该下载为 CSV 的 Zip
编辑 : 如果您没有具体位置,您可以使用Path.GetTempPath()