最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中DataGridView導(dǎo)出Excel的兩種方法

 更新時間:2021年01月13日 14:52:36   作者:貝爺_野外求生  
這篇文章主要介紹了C#中DataGridView導(dǎo)出Excel的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

第一種是用數(shù)據(jù)流導(dǎo)出:

#region
      SaveFileDialog saveFileDialog = new SaveFileDialog();
      saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
      saveFileDialog.FilterIndex = 0;
      saveFileDialog.RestoreDirectory = true;
      saveFileDialog.CreatePrompt = true;
      saveFileDialog.Title = "Export Excel File";
      saveFileDialog.ShowDialog();
      if (saveFileDialog.FileName == "")
        return;
      Stream myStream;
      myStream = saveFileDialog.OpenFile();
      StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
 
      string str = "";
      try
      {
        for (int i = 0; i < dataGridView1.ColumnCount; i++)
        {
          if (i > 0)
          {
            str += "\t";
          }
          str += dataGridView1.Columns[i].HeaderText;
        }
        sw.WriteLine(str);
        for (int j = 0; j < dataGridView1.Rows.Count; j++)
        {
          string tempStr = "";
          for (int k = 0; k < dataGridView1.Columns.Count; k++)
          {
            if (k > 0)
            {
              tempStr += "\t";
            }
            tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString();
          }
          sw.WriteLine(tempStr);
        }
        sw.Close();
        myStream.Close();
      }
 
      catch (Exception ex)
      {
        //MessageBox.Show(ex.ToString());
      }
      finally
      {
        sw.Close();
        myStream.Close();
      }
#endregion

這種方法的優(yōu)點就是導(dǎo)出比較快,但是excel的表格里面設(shè)置標題,字體樣式等都不能弄,因為你是用數(shù)據(jù)流直接導(dǎo)出為excel的,除非你能在數(shù)據(jù)流中設(shè)置這些樣式,這個我還沒這本事,哪位大哥會的教一下...嘿嘿

第二種方法是直接寫一個類,這個類直接操作EXCEL的:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Text;
using System.Diagnostics;
using System.IO;
using Microsoft.Office.Interop.Excel;
 
namespace Excel
{
  public class Export
  {
    /// <summary>
    /// DataGridView導(dǎo)出Excel
    /// </summary>
    /// <param name="strCaption">Excel文件中的標題</param>
    /// <param name="myDGV">DataGridView 控件</param>
    /// <returns>0:成功;1:DataGridView中無記錄;2:Excel無法啟動;9999:異常錯誤</returns>
    public int ExportExcel(string strCaption, DataGridView myDGV, SaveFileDialog saveFileDialog)
    {
      int result = 9999;
      
      //保存
      
      saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
      saveFileDialog.FilterIndex = 0;
      saveFileDialog.RestoreDirectory = true;
      //saveFileDialog.CreatePrompt = true;
      saveFileDialog.Title = "Export Excel File";
      if ( saveFileDialog.ShowDialog()== DialogResult.OK)
      {
        if (saveFileDialog.FileName == "")
        {
          MessageBox.Show("請輸入保存文件名!");
          saveFileDialog.ShowDialog();
        }
          // 列索引,行索引,總列數(shù),總行數(shù)
        int ColIndex = 0;
        int RowIndex = 0;
        int ColCount = myDGV.ColumnCount;
        int RowCount = myDGV.RowCount;
 
        if (myDGV.RowCount == 0)
        {
          result = 1;
        }
 
        // 創(chuàng)建Excel對象
        Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
        if (xlApp == null)
        {
          result = 2;
        }
        try
        {
          // 創(chuàng)建Excel工作薄
          Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
          Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[1];
          // 設(shè)置標題
          Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, ColCount]); //標題所占的單元格數(shù)與DataGridView中的列數(shù)相同
          range.MergeCells = true;
          xlApp.ActiveCell.FormulaR1C1 = strCaption;
          xlApp.ActiveCell.Font.Size = 20;
          xlApp.ActiveCell.Font.Bold = true;
          xlApp.ActiveCell.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
          // 創(chuàng)建緩存數(shù)據(jù)
          object[,] objData = new object[RowCount + 1, ColCount];
          //獲取列標題
          foreach (DataGridViewColumn col in myDGV.Columns)
          {
            objData[RowIndex, ColIndex++] = col.HeaderText;
          }
          // 獲取數(shù)據(jù)
          for (RowIndex = 1; RowIndex < RowCount; RowIndex++)
          {
            for (ColIndex = 0; ColIndex < ColCount; ColIndex++)
            {
              if (myDGV[ColIndex, RowIndex - 1].ValueType == typeof(string)
                || myDGV[ColIndex, RowIndex - 1].ValueType == typeof(DateTime))//這里就是驗證DataGridView單元格中的類型,如果是string或是DataTime類型,則在放入緩存時在該內(nèi)容前加入" ";
              {
                objData[RowIndex, ColIndex] = "" + myDGV[ColIndex, RowIndex - 1].Value;
              }
              else
              {
                objData[RowIndex, ColIndex] = myDGV[ColIndex, RowIndex - 1].Value;
              }
            }
            System.Windows.Forms.Application.DoEvents();
          }
          // 寫入Excel
          range = xlSheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[RowCount, ColCount]);
          range.Value2 = objData;
 
          xlBook.Saved = true;
          xlBook.SaveCopyAs(saveFileDialog.FileName);
        }
        catch (Exception err)
        {
          result = 9999;
        }
        finally
        {
          xlApp.Quit();
          GC.Collect(); //強制回收
        }
        //返回值
        result = 0;
      }
      
      return result;
    }
 
 
  }
}

這個優(yōu)點是能設(shè)置樣式什么的。缺點就是導(dǎo)出速度慢...

以上兩種方法都是參考了很多料的..寫在這里以便于相互學(xué)習(xí)..

補充一下:用第二種方法導(dǎo)出excel會有格式方面的變化,比如身份證號碼按科學(xué)計算法導(dǎo)出了,不是按原先的模型

改進方法是在寫入excel時添加一個格式聲明:range.NumberFormatLocal = "@";

如:// 寫入Excel

range = xlSheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[RowCount + 2, ColCount]);
range.NumberFormatLocal = "@";
range.Value2 = objData;

到此這篇關(guān)于C#中DataGridView導(dǎo)出Excel的兩種方法的文章就介紹到這了,更多相關(guān)C# DataGridView導(dǎo)出Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

石林| 喀什市| 洮南市| 新兴县| 铜川市| 洛浦县| 日喀则市| 开封市| 神池县| 临猗县| 宝兴县| 秭归县| 抚顺市| 南漳县| 元谋县| 大宁县| 临朐县| 平安县| 夏邑县| 堆龙德庆县| 汤阴县| 马龙县| 涞源县| 阿克陶县| 中西区| 阳曲县| 海伦市| 尖扎县| 盈江县| 凯里市| 莆田市| 绥阳县| 泗阳县| 宜黄县| 武乡县| 凌云县| 临泽县| 长兴县| 当阳市| 周至县| 台东市|