我想將一個DataTable轉換成XLS文件。下面轉換DataTable不可逆?
Snippet1
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition","attachment;filename=New.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
for (int i = 1; i < gvGridView.HeaderRow.Cells.Count; i++)
{
gvGridView.HeaderRow.Cells[i].Text = Table.Columns[i - 1].ColumnName;
}
for (int i = 0; i < gvGridView.Rows.Count; i++)
{
//Apply text style to each Row
gvGridView.Rows[i].Attributes.Add("class", "textmode");
}
gvGridView.RenderControl(hw);
//style to format numbers to string
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
代碼此代碼似乎罰款。它生成了一個xls文件。它可以正確打開。不過,我試圖逆向工程這個過程。簡而言之,將這個特定的xls文件轉換回數據表。下面的代碼:
Snippet2int idx = filen.IndexOf(".");
string tf = filen.Remove(idx, 4);
OleDbConnection MyConnection = null;
DataSet DtSet = null;
OleDbDataAdapter MyCommand = null;
//Connection for MS Excel 2003 .xls format
MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties=Excel 8.0;");
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [table$]", MyConnection);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
dt = DtSet.Tables[0];
MyConnection.Close();
if (dt.Rows.Count > 0)
{
theGridView.DataSource = dt;
theGridView.DataBind();
}
if(System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
此代碼產生錯誤。它說:
外部文件格式不支持
我注意到,當你使用了錯誤的OLEDB提供此錯誤是相似的。但在我的情況下,應該沒有問題,因爲我使用Microsoft.Jet.OLEDB.4.0 for .xls(2003)格式。但不知何故它仍然發生。
此代碼以某種方式適用於我測試的任何其他.xls文件。 它不適用於使用#Snippet1轉換而生成的文件。不過,假設我使用#Snippet1生成了一個文件,然後將所有單元複製到一個新的.xls文件中。 #Snippet2將對這個新文件起作用。總之,只有從#Snippet1直接生成的文件不起作用。
我想我做錯了什麼。所以我希望有人能夠幫助我。
你能告訴我怎麼做嗎?如果你願意的話,你會感到欣喜若狂。 – rofans91
我自己設法解決了這個問題。你的解釋是對的。這是一個創建.xls文件的不好方法。 – rofans91