将DataGridView的数据导出为excel

 //导出Excel文件
        public static void DataToExcel(DataGridView dgvPara)
        {
            int intColIndex = 1;                            //列序号
            int intRowCount = dgvPara.RowCount;             //行数
            int intColCount = dgvPara.ColumnCount;          //列数
            int intNotShowCount = 0;                        //不显示的列
            object[,] objData;                             //保存DataGridView中的数据
            string strFileName = "";
 
 
            //判断:如果行数或者列数有问题,则不予导出
 
            //行数列数必须大于0    
            if (intRowCount <= 0 || intColCount <= 0)
            {
                MessageBox.Show("没有数据可供保存!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
 
            //行数不可以大于65536    
            if (intRowCount > 65536)
            {
                MessageBox.Show("数据记录数太多(最多不能超过65536行),不能保存!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
 
            //列数不可以大于255    
            if (intColCount > 255)
            {
                MessageBox.Show("数据记录列数太多(最多不能超过255列),不能保存!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
 
            //初始化Excel
            Microsoft.Office.Interop.Excel.Application AppExcel = new Microsoft.Office.Interop.Excel.Application();
            if (AppExcel == null)
            {
                MessageBox.Show("Excel无法启动!");
                return;
            }
            AppExcel.Visible = false;
            //初始化Sheet
            Workbooks MyWorkBooks = AppExcel.Workbooks;
            _Workbook MyWorkBook = MyWorkBooks.Add(XlWBATemplate.xlWBATWorksheet);
            Sheets MySheets = AppExcel.Sheets;
            _Worksheet MySheet = (_Worksheet)MySheets[1];
            if (MySheet == null)
            {
                MessageBox.Show("WorkSheet错误!");
                return;
            }
 
            //初始化Range
            Range MyRange = MySheet.Range["A1"];
            if (MyRange == null)
            {
                MessageBox.Show("Range错误!");
                return;
            }
            try
            {
                //填写列表头
                foreach (DataGridViewColumn col in dgvPara.Columns)
                {
                    if (col.Visible == true && col.HeaderText != "")
                    {
                        if (col.HeaderText.ToString().Contains("日期") || col.HeaderText.ToString().Contains("时间"))
                        {
                            MySheet.Range[MySheet.Cells[1, intColIndex], MySheet.Cells[intRowCount + 1, intColIndex]].NumberFormatLocal = "yyyy-MM-dd";
                        }
                        MySheet.Cells[1, intColIndex++] = col.HeaderText;
                    }
                    else
                    {
                        intNotShowCount++;
                    }
                }
 
                //保存DataGridView中的数据到objData中
                objData = new object[intRowCount + 1, intColCount];
                for (int i = 0; i < intRowCount; i++)
                {
                    for (int j = 0, k = 0; j < intColCount; j++)
                    {
                        if (dgvPara.Columns[j].Visible == false || dgvPara.Columns[j].HeaderText == "")
                            continue;
 
                        if (dgvPara.Rows[i].Cells[j].Value == null)
                            objData[i, k] = "";
                        else
                            objData[i, k] = dgvPara.Rows[i].Cells[j].Value;
 
                        k++;
                    }
                }
 
                格式化数据列
                //intRowCount++;
                //MySheet.get_Range("A2", "A" + intRowCount.ToString()).NumberFormatLocal = "@";
                //MySheet.get_Range("B2", "B" + intRowCount.ToString()).NumberFormatLocal = "yyyy-M-d";
                //MySheet.get_Range("C2", "C" + intRowCount.ToString()).NumberFormatLocal = "@";
 
                //把数据填充到Excel文件中
                MyRange = MySheet.Range[MySheet.Cells[2, 1], MySheet.Cells[intRowCount + 1, intColCount-intNotShowCount]];
                MyRange.Value2 = objData;
 
                MySheet.Columns.AutoFit();
 
                //画边框
                MyRange = MySheet.Range[MySheet.Cells[1, 1], MySheet.Cells[intRowCount + 1, intColCount - intNotShowCount]];
                //MyRange.Cells.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
                MyRange.Borders.LineStyle = 1;
 
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "Excel 97-2003 工作薄(*.xls)|*.xls|Excel 工作薄(*.xlsx)|*.xlsx";
                sfd.RestoreDirectory = true;
                sfd.OverwritePrompt = true;
                sfd.DefaultExt = ".xls";
                sfd.Title = "保存文件";
                if (DialogResult.OK != sfd.ShowDialog())
                {
                    MySheet=null;
                    return;
                }
 
                strFileName = sfd.FileName;
 
                if (System.IO.File.Exists(strFileName))
                {
                    System.IO.File.Delete(strFileName);
                }
 
                MyWorkBook.SaveAs(strFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                      Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value,
                      Missing.Value, Missing.Value);
                if (MessageBox.Show("保存EXCEL成功,是否要打开文件?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    AppExcel.Visible = true;
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            finally
            {
                if (AppExcel.Visible == false)
                {
                    MyWorkBook.Close(null, null, null);
                    MyWorkBooks.Close();
                    AppExcel.Application.Quit();
                    AppExcel.Quit();
 
                    MySheet = null;
                    MyWorkBook = null;
                    AppExcel = null;
                }
            }
        }

注意点:
需要自己手动添加

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值