C#excelにデータを書き込む3つの方法
1つ目:DataGridのデータをストリーム形式でexcelに書き、フォーマットはhtml形式で存在する
2つ目は、データソースのデータをexcelにファイルストリームとして書き、フォーマットはtxtとして存在する
第3種:データソースの中のデータを直接excelに書いて、フォーマットはxlsの形式で存在して、利益は導出します
データは直接インポートすることができて、デジタルフォーマットを自動的にテキストフォーマットに変換することができて、減らすことができます
フォーマット変換の煩雑な部分は、数字をテキストに変換するフォーマットの行数を予約することもできます.
完全にカスタマイズ可能
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=DialoutTemplate.xls");
// GetEncoding("GB2312"); !!!
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel";// excel 。
//Response.ContentType = "application/vnd.ms-excel";//
//Response.Charset = "";
// ViewState
EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();//
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);// WEB HTML 。
// ASP.NET HTML
// control HTML
dg.RenderControl(hw);// table HtmlTextWriter
// HTML
Response.Write(tw.ToString());
Response.Flush();
Response.End();
2つ目は、データソースのデータをexcelにファイルストリームとして書き、フォーマットはtxtとして存在する
FileStream fs = new FileStream(Server.MapPath("report_export/DialoutTemplate.xls"), FileMode.Create, FileAccess.Write);
StreamWriter rw = new StreamWriter(fs, Encoding.Default);// StreamWriter ;
DataTable dt = GetDataTableSource();
int count = dt.Columns.Count;
string head = "";
string values = "";
for (int i = 0; i < count; i++)
{
string h = dt.Columns[i].ColumnName + "\t";
string v = dt.Rows[0][i].ToString() + "\t";
head += h;
values += v;
}
rw.WriteLine(head);
rw.WriteLine(values);
rw.Close();
fs.Close();
Response.Redirect("report_export/DialoutTemplate.xls");
第3種:データソースの中のデータを直接excelに書いて、フォーマットはxlsの形式で存在して、利益は導出します
データは直接インポートすることができて、デジタルフォーマットを自動的にテキストフォーマットに変換することができて、減らすことができます
フォーマット変換の煩雑な部分は、数字をテキストに変換するフォーマットの行数を予約することもできます.
完全にカスタマイズ可能
Excel.Application xlApp;
Excel.Workbook xlBook;
Excel.Workbooks xlBooks;
//Excel.Range xlRange;
Excel.Sheets xlsheets;
Excel.Worksheet xlSheet;
int k = 0;
try
{
string strCurrentPath = Server.MapPath("report_export/DialoutTemplate.xls");
string FilePath = strCurrentPath;
FileInfo fi = new FileInfo(FilePath);
if (fi.Exists) // , !
{
fi.Delete();
}
xlApp = new Excel.Application();
xlBooks = xlApp.Workbooks;
xlBook = xlBooks.Add(Type.Missing);
xlsheets = xlBook.Worksheets;
IntPtr intptr = new IntPtr(xlApp.Hwnd);
xlSheet = (Excel.Worksheet)xlsheets.get_Item(1);
DataTable dt = GetDataTableSource();
int count = dt.Columns.Count;
for (int i = 0; i < count; i++)
{
string h = dt.Columns[i].ColumnName;
string v = dt.Rows[0][i].ToString();
((Excel.Range)xlSheet.Cells[1, i + 1]).Value2 = h;
Excel.Range r1 = xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[1, i + 1]);
r1.NumberFormatLocal = "@";
((Excel.Range)xlSheet.Cells[2, i + 1]).Value2 = v;
Excel.Range r2 = xlSheet.get_Range(xlSheet.Cells[2, 1], xlSheet.Cells[2, i + 1]);
r2.NumberFormatLocal = "@";
}
for (int j = 1; j < 500; j++)
{
Excel.Range r = xlSheet.get_Range(xlSheet.Cells[2 + j, 1], xlSheet.Cells[2 + j, count]);
r.NumberFormatLocal = "@";
}
xlBook.SaveAs(FilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xlBook.Close(false, Type.Missing, Type.Missing);
xlBooks.Close();
xlApp.Quit();
Response.Redirect("report_export/DialoutTemplate.xls");
GetWindowThreadProcessId(intptr, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
//xlRange = null;
xlSheet = null;
xlBook = null;
xlApp = null;
}