操作Execl的三种方法

http://blog.csdn.net/hfzsjz/article/details/3521427

http://blog.csdn.net/hfzsjz/article/details/3521331

http://blog.csdn.net/hfzsjz/article/details/3521482


方法1:通过oledb,使用sql语句操作数据表

create table会创建worksheet,insert语句会插入一行。用StringBuilder性能会好一些。

public void DealExcelOut()
{
    String strconn = "Provider=Microsoft.jet.OLEDB.4.0; Data Source=" + path2 + "; Extended Properties = Excel 8.0";
    OleDbConnection cn = new OleDbConnection(strconn);
    OleDbCommand cmd = new OleDbCommand();
    String cmdstr;

    //根据ListView创建VPN表
    cn.Open();
    cmd.Connection = cn;
    cmdstr = "Create Table VPN (";
    foreach (ColumnHeader ch in listView_Main.Columns)
    {
         cmdstr += ch.Text + " TEXT,";
    }

    cmdstr = cmdstr.Remove(cmdstr.Length - 1);
    cmdstr += ")";
    cmd.CommandText = cmdstr;
    cmd.ExecuteNonQuery();
                
    //导出数据
 
    long cols = listView_Main.Columns.Count;

    foreach (ListViewItem lvi in listView_Main.Items)
    {
        cmdstr = "Insert Into VPN Values (";
        for (long i = 0; i < cols; i++)
             cmdstr += "'" + lvi.SubItems[(Int32)i].Text + "',";

        cmdstr = cmdstr.Remove(cmdstr.Length - 1);
        cmdstr += ")";
        cmd.CommandText = cmdstr;
        cmd.ExecuteNonQuery();
     }

     cn.Close();

}



方法2:使用office组件

如果电脑上没有安装office,可能会出问题。

<span style="font-family:Arial;color:#333333;">/// <summary>
/// 将ListView的内容写入Excel表中
/// </summary>
/// <param name="LView">ListView控件</param>
/// <param name="strFilter">内容的标题</param>
public void UWriteListViewToExcel(ListView LView, string strTitle)
{
      Microsoft.Office.Interop.Excel.Application ExcelApp =new Microsoft.Office.Interop.Excel.Application();
      object m_objOpt = System.Reflection.Missing.Value;                
      Microsoft.Office.Interop.Excel.Workbooks ExcelBooks = (Microsoft.Office.Interop.Excel.Workbooks)ExcelApp.Workbooks;
      Microsoft.Office.Interop.Excel._Workbook ExcelBook = (Microsoft.Office.Interop.Excel._Workbook)(ExcelBooks.Add(m_objOpt));
      Microsoft.Office.Interop.Excel._Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel._Worksheet)ExcelBook.ActiveSheet;
                
      //设置标题
      ExcelApp.Caption = strTitle;
      ExcelSheet.Cells[1, 1] = strTitle;

      //写入列名
      for (int i = 1; i <= LView.Columns.Count; i++)
      {
            ExcelSheet.Cells[2, i] = LView.Columns[i-1].Text;
      }
      //写入内容
      for (int i = 3; i < LView.Items.Count + 3; i++)
      {
            ExcelSheet.Cells[i, 1] = LView.Items[i - 3].Text;
            for (int j = 2; j <= LView.Columns.Count; j++)
            {
                 ExcelSheet.Cells[i, j] = LView.Items[i-3].SubItems[j-1].Text;
            }
      }

      //显示Excel
      ExcelApp.Visible = true;            
}
</span>

方法3:  导出为逗号分隔的文本

本质上是csv文件,如果文本里有逗号、换行等等控制字符,需要仔细处理。因此不推荐。

<span style="font-family:Arial;color:#333333;">public static bool ExportForListView(ListView listView, string fileName, bool isShowExcle) 
{ 
     FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write); 
     StreamWriter sw = new StreamWriter(fs, Encoding.Unicode); 
     string excel = "";      //用于存放要写入的一行文本。 
     for (int i = 0; i < listView.Columns.Count; i++) 
     { 
          excel = excel + listView.Columns[i].Text.ToString().Trim() + Convert.ToChar(9); 
     } 
     sw.WriteLine(excel);    //写入DataGridView的标题行。 
     excel = ""; 
     for (int i = 0; i < listView.Items.Count; i++) 
     { 
          for (int j = 0; j < listView.Columns.Count; j++) 
          { 
               if (listView.Items[i].SubItems[j].Text.ToString() == null) 
                    excel = excel + "" + Convert.ToChar(9);    //循环写入每一行 
               else 
                    excel = excel + listView.Items[i].SubItems[j].Text.ToString() + Convert.ToChar(9); 
           } 
           sw.WriteLine(excel); 
           excel = ""; 
     } 
     sw.Close(); 
     fs.Close(); 
     if (isShowExcle) 
     { 
           System.Diagnostics.Process.Start(fileName); 
     } 
     return true; 
 }
</span>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值