我有一個文本文件是在製表符分隔符和以下是我的代碼來生成其Excel。無法生成.xlsx文件
protected void to_excel(object sender, EventArgs e)
{
string filepath = Path.Combine(Server.MapPath("~/Files"), fileupload.FileName);
fileupload.SaveAs(filepath);
string fname = fileupload.PostedFile.FileName;
DataTable dt = (DataTable)ReadToEnd(filepath);
string sFilename = fname.Substring(0, fname.IndexOf("."));
HttpResponse response = HttpContext.Current.Response;
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + sFilename + ".xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();
dg.DataSource = dt;
dg.DataBind();
dg.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
private object ReadToEnd(string filePath)
{
DataTable dtDataSource = new DataTable();
string[] fileContent = File.ReadAllLines(filePath);
if (fileContent.Count() > 0)
{
string[] columns = fileContent[0].Split('\t');
for (int i = 0; i < columns.Count(); i++)
{
dtDataSource.Columns.Add(columns[i]);
}
for (int i = 1; i < fileContent.Count(); i++)
{
string[] rowData = fileContent[i].Split('\t');
dtDataSource.Rows.Add(rowData);
}
}
return dtDataSource;
}
此代碼工作正常,因爲我生成2003年的Excel文件(.xls)。
但是,如果我生成一個2007(.xlsx)格式通過改變代碼
Response.AddHeader("content-disposition", "attachment;filename=" + sFilename + ".xlsx");
我得到一個error like this。
我做了我的功課,並且知道這個錯誤是因爲我的程序生成的.xlsx文件是通過使用HTML(標記語言)XML(標記語言)來完成的,這實際上應該用於2007 excel文件。
我的問題是我應該做些什麼改變才能獲得理想的結果,即我得到了2007年的Excel表格!
你試圖代碼自己寫一個Excel文件的XML?你是否解壓縮了一個XLSX文件,並看到了什麼? – Brad
你應該嘗試一下。有很多文件進入XLSX。雖然它基於XML,但並不像您想象的那麼簡單。 – Brad
@brad我會這麼做! 但你能告訴我如何轉換Excel(.xlsx)格式的數據表! – Luv