首页 新闻 会员 周边

winfomr导出excel

0
悬赏园豆:100 [待解决问题]
  • 我是用这方法导出excel的,但格式控制不了;(不能用前面加“’”);那EXCEL的格式怎样控制呀?
  • #region DateGridView导出到csv格式的Excel   
  • /// <summary>   
  • /// 常用方法,列之间加\t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。   
  • /// </summary>   
  • /// <remarks>   
  • /// using System.IO;   
  • /// </remarks>   
  • /// <param name="dgv"></param>   
  • private void DataGridViewToExcel(DataGridView dgv)   
  • {   
  •     SaveFileDialog dlg = new SaveFileDialog();   
  •     dlg.Filter = "Execl files (*.xls)|*.xls";   
  •     dlg.FilterIndex = 0;   
  •     dlg.RestoreDirectory = true;   
  •     dlg.CreatePrompt = true;   
  •     dlg.Title = "保存为Excel文件";   
  •   
  •     if (dlg.ShowDialog() == DialogResult.OK)   
  •     {   
  •         Stream myStream;   
  •         myStream = dlg.OpenFile();   
  •         StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));   
  •         string columnTitle = "";   
  •         try  
  •         {   
  •             //写入列标题   
  •             for (int i = 0; i < dgv.ColumnCount; i++)   
  •             {   
  •                 if (i > 0)   
  •                 {   
  •                     columnTitle += "\t";   
  •                 }   
  •                 columnTitle += dgv.Columns[i].HeaderText;   
  •             }   
  •             sw.WriteLine(columnTitle);   
  •   
  •             //写入列内容   
  •             for (int j = 0; j < dgv.Rows.Count; j++)   
  •             {   
  •                 string columnValue = "";   
  •                 for (int k = 0; k < dgv.Columns.Count; k++)   
  •                 {   
  •                     if (k > 0)   
  •                     {   
  •                         columnValue += "\t";   
  •                     }   
  •                     if (dgv.Rows[j].Cells[k].Value == null)   
  •                         columnValue += "";   
  •                     else  
  •                         columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();   
  •                 }   
  •                 sw.WriteLine(columnValue);   
  •             }   
  •             sw.Close();   
  •             myStream.Close();   
  •         }   
  •         catch (Exception e)   
  •         {   
  •             MessageBox.Show(e.ToString());   
  •         }   
  •         finally  
  •         {   
  •             sw.Close();   
  •             myStream.Close();   
  •         }   
  •     }   
  •  
  • #endregion  
  • 遇见的主页 遇见 | 初学一级 | 园豆:100
    提问于:2011-06-17 10:27
    < >
    分享
    所有回答(4)
    0

     NPOI生成原生的Excel。

    几行代码即可。

    http://www.yongfa365.com/Item/NPOI-MyXls-DataTable-To-Excel-From-Excel.html

    邀月 | 园豆:25475 (高人七级) | 2011-06-17 10:49
    有没有不用第三方控件的方法呀;
    支持(0) 反对(0) 遇见 | 园豆:100 (初学一级) | 2011-06-17 11:07
    0

    CSV文档就是文本文件,格式很少,可以采用openxml等方式或者使用Excel的对象模型操作也行

    可以参考: http://www.cnblogs.com/2018/category/249767.html

    2012 | 园豆:21230 (高人七级) | 2011-06-17 17:39
    我做的是winform导出呀,也能用吗?
    支持(0) 反对(0) 遇见 | 园豆:100 (初学一级) | 2011-06-20 11:41
    OpenXML是独立的一个库文件
    Excel的对象模型需要基于Excel的实例运行
    两种方式都可以,第一个速度和效率快一些
    支持(0) 反对(0) 2012 | 园豆:21230 (高人七级) | 2011-06-20 11:54
    0
    public void ExportExcel(DataTable dt)
    {
    if (dt == null) return;
    Microsoft.Office.Interop.Excel.Application xlApp
    = new Microsoft.Office.Interop.Excel.Application();

    if (xlApp == null)
    {
    MessageBox.Show(
    "无法创建Excel对象,可能您的电脑未安装Excel!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
    return;
    }
    System.Globalization.CultureInfo CurrentCI
    = System.Threading.Thread.CurrentThread.CurrentCulture;
    System.Threading.Thread.CurrentThread.CurrentCulture
    = new System.Globalization.CultureInfo("en-US");
    Microsoft.Office.Interop.Excel.Workbooks workbooks
    = xlApp.Workbooks;
    Microsoft.Office.Interop.Excel.Workbook workbook
    = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
    Microsoft.Office.Interop.Excel.Worksheet worksheet
    = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
    Microsoft.Office.Interop.Excel.Range range;
    long totalCount = dt.Rows.Count;
    long rowRead = 0;
    float percent = 0;
    for (int i = 0; i < dt.Columns.Count; i++)
    {
    worksheet.Cells[
    1, i + 1] = dt.Columns[i].ColumnName;
    range
    = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
    range.Interior.ColorIndex
    = 15;
    range.Font.Bold
    = true;
    }
    for (int r = 0; r < dt.Rows.Count; r++)
    {
    for (int i = 0; i < dt.Columns.Count; i++)
    {
    worksheet.Cells[r
    + 2, i + 1] = dt.Rows[r][i];
    }
    rowRead
    ++;
    percent
    = ((float)(100 * rowRead)) / totalCount;
    }
    xlApp.Visible
    = true;
    }
    Daywei | 园豆:551 (小虾三级) | 2011-06-18 12:03
    不要用这种方式,性能很差的。而且要服务器安装Excel服务,还要授权网络用户可以修改访问。
    支持(0) 反对(0) InFuture | 园豆:325 (菜鸟二级) | 2011-06-20 09:38
    如果不是在服务器中 只是简单的winform程序,就够了。那请问阁下有何高见,还望不吝赐教
    支持(0) 反对(0) Daywei | 园豆:551 (小虾三级) | 2011-06-20 09:49
    用这种方式,性能真的很差。
    我刚开始也是用这种的,一人1000行40列的数据导出要5分多钟;
    所以试着用CSV文档的方法;但是那列的格式又控制不到了
    支持(0) 反对(0) 遇见 | 园豆:100 (初学一级) | 2011-06-20 11:40
    0

    可以参考http://excellibrary.googlecode.com

    不需要安装EXCEL,也不需要第三方控件。

    还支持导出单元格的数据格式。完完全全的EXCEL!

    lucika.zh | 园豆:62 (初学一级) | 2011-06-24 10:45
    清除回答草稿
       您需要登录以后才能回答,未注册用户请先注册