C#excelにデータを書き込む3つの方法


1つ目:DataGridのデータをストリーム形式でexcelに書き、フォーマットはhtml形式で存在する
               
            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;
            }