C# EXCEL创建,编辑,导出,按模板保存以及Excel与 DataGridView互转

创建Excel文件:

private void CreatExcel(string path)
{

            MSExcel.Application excelApp = new MSExcel.Application(); //Excel应用程序变量
            MSExcel.Workbook excelDoc;                                                      //Excel文档变量
            object missing = System.Reflection.Missing.Value;
            try
            {

                if (!File.Exists((string)path))

                {

                    Object Nothing = Missing.Value;
                    excelDoc = excelApp.Workbooks.Add(Nothing);
                    //使用第一个工作表作为插入数据的工作表
                    MSExcel.Worksheet ws = (MSExcel.Worksheet)excelDoc.Sheets[1];
                    MSExcel.Range excelRange = ws.get_Range(ws.Cells[1, 1], ws.Cells[5, 6]);
                    excelRange.EntireColumn.AutoFit();//Excel选择区域自动调整宽度
                    //声明一个MSExcel.Range 类型的变量r
                    MSExcel.Range c1 = (MSExcel.Range)ws.Cells[1, 1];  //单元格赋值
                    c1.Value2 = "产品型号";
                    MSExcel.Range c2 = (MSExcel.Range)ws.Cells[1, 2];
                    c2.Value2 = "SN号";
                    MSExcel.Range r1;
                    r1 = ws.get_Range(ws.Cells[2, 1], ws.Cells[3, 1]); //取得合并的区域 
                    r1.MergeCells = true;
                    object format = MSExcel.XlFileFormat.xlWorkbookNormal;
                    excelDoc.SaveAs(path, format, Nothing, Nothing, Nothing, Nothing, MSExcel.XlSaveAsAccessMode.xlExclusive, Nothing, Nothing, Nothing, Nothing, Nothing);

                    //关闭excelDoc文档对象
                    excelDoc.Close(Nothing, Nothing, Nothing);
                    //关闭excelApp组件对象
                    excelApp.Quit();
                    //System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                    //excelApp = null;
                }
            }

            catch (Exception CreateExcelEX)
            {
                MessageBox.Show("创建EXCEL文件失败:" + CreateExcelEX.Message);
            }

}

编辑Excel文件:

private void SaveDataToExcel(string path)
{
            //Excel应用程序变量
            MSExcel.Application excelApp = new MSExcel.Application();                               
            object missing = System.Reflection.Missing.Value;
            MSExcel.Workbook wb = excelApp.Application.Workbooks.Open(path, missing, missing, missing, missing, missing,missing, missing, missing, missing, missing, missing, missing, missing, missing);

            excelApp.Application.DisplayAlerts = false;//不显示提示对话框
            //取得第一个工作薄
            MSExcel.Worksheet wk = (MSExcel.Worksheet)wb.Worksheets.get_Item(1);
            int rowCount = wk.UsedRange.Cells.Rows.Count;//读取excel数据行数
            try
            {

                //存入测试时间
                MSExcel.Range t1 = (MSExcel.Range)wk.Cells[rowCount + 1, 2];
                t1.Value2 = DateTime.Now.ToString();
                wb.Save();
                //wk = null;
                wb.Close(false, missing, missing);
                //excelApp.Quit();
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                //excelApp = null;
            }
            catch (Exception ExcelEX)
            {

                MessageBox.Show("Excel保存出错:" + ExcelEX.Message);
             }
}

按照模板保存数据:

private void SaveModel_TestData(string modelpath)
{

            //需要添加 Microsoft.Office.Interop.Excel引用
            Microsoft.Office.Interop.Excel.Application myexcel = new Microsoft.Office.Interop.Excel.Application();
            myexcel.Visible = false;
            myexcel.UserControl = true;
            string path = ModelPath + "\\" + "Template.xls";
            Microsoft.Office.Interop.Excel.Workbooks workbooks = myexcel.Workbooks;
            Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(path); 
            //加载模板
            Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
            Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(3); //第3个工作薄。
            if (worksheet == null) return;  //工作薄中没有工作表.
            try
            {

                worksheet.Cells[2, 8] = txt_UserID.Text.Trim();
            }
            catch (Exception)
            {

                workbook.Close(false, Type.Missing, Type.Missing);
                myexcel.Quit();
                return;
            }
            object Nothing = System.Reflection.Missing.Value;
            Microsoft.Office.Interop.Excel.Workbook workbook1 = myexcel.Workbooks.Add(Nothing);
            Microsoft.Office.Interop.Excel.Worksheet worksheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets["Sheet2"];//打开Sheet2
            worksheet1.Copy(workbook1.Sheets["Sheet1"], Type.Missing);//复制模板Sheet1内容
            workbook.Close(false, Type.Missing, Type.Missing);
            workbook1.SaveAs(modelpath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            workbook1.Close(false, Type.Missing, Type.Missing);
            myexcel.Quit();

}

从datagridview中到出Excel数据:

private void ExportExcel(string fileName, DataGridView myDGV)
{
    string saveFileName = "";
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.DefaultExt = "xls";
    saveDialog.Filter = "Excel文件|*.xls";
    saveDialog.FileName = fileName;
    saveDialog.ShowDialog();
    saveFileName = saveDialog.FileName;
    if (saveFileName.IndexOf(":") < 0) return; //被点了取消
    Microsoft.Office.Interop.Excel.Application xlApp= new Microsoft.Office.Interop.Excel.Application();
    if (xlApp == null)
    {
        MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
        return;
    }
    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];//取得sheet1
    //写入标题
    for (int i = 0; i < myDGV.ColumnCount; i++)
    {

        worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
    }

    //写入数值
    for (int r = 0; r < myDGV.Rows.Count; r++)
    {
        for (int i = 0; i < myDGV.ColumnCount; i++)
        {
            worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;
        }
        System.Windows.Forms.Application.DoEvents();
    }
    worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
    if (saveFileName != "")
    {
        try
        {

            //int FormatNum;//保存excel文件的格式         
            //string Version;//excel版本号
            //Version = xlApp.Version;//获取你使用的excel 的版本号         
          //if (Convert.ToDouble(Version) < 12)//You use Excel 97-2003         
          //{ 
               //FormatNum = -4143;         
          //} 
          //else//you use excel 2007 or later         
          //{ 
                                //FormatNum = 56;         
          //}
            workbook.Saved = true;
            workbook.SaveCopyAs(saveFileName);
        }
        catch (Exception ex)
        {
            MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
        }
    }
    xlApp.Quit();
    GC.Collect();//强行销毁
    MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示",         
    MessageBoxButtons.OK,              MessageBoxIcon.Information);
}

Excel与 DataGridView互转:

// DataGridView转Excel
private void ExportExcel(string fileName, DataGridView myDGV)
{
    string saveFileName = "";
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.DefaultExt = "xls";
    saveDialog.Filter = "Excel文件|*.xls";
    saveDialog.FileName = fileName;
    saveDialog.ShowDialog();
    saveFileName = saveDialog.FileName;
    if (saveFileName.IndexOf(":") < 0) return; //被点了取消
    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
    if (xlApp == null)
    {
        MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
        return;
    }

    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];//取得sheet1

    //写入标题
    for (int i = 0; i < myDGV.ColumnCount; i++)
    {
        worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
    }
    //写入数值
    for (int r = 0; r < myDGV.Rows.Count; r++)
    {
        for (int i = 0; i < myDGV.ColumnCount; i++)
        {
            worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;
        }
        System.Windows.Forms.Application.DoEvents();
    }

    worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
    if (saveFileName != "")
    {
        try
        {

    //        int FormatNum;//保存excel文件的格式        
    //        string Version;//excel版本号
    //        Version = xlApp.Version;//获取你使用的excel 的版本号         
    //        if (Convert.ToDouble(Version) < 12)//You use Excel 97-2003         
    //        { 
    //FormatNum = -4143;         
    //        } 
    //else//you use excel 2007 or later         
    //        { 
    //FormatNum = 56;         
    //        }
            workbook.Saved = true;
            workbook.SaveCopyAs(saveFileName);
        }
        catch (Exception ex)
        {

            MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
        }

    }
    xlApp.Quit();
    GC.Collect();//强行销毁
    MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

 

// Excel转DataGridView
public void EcxelToDataGridView(string filePath, DataGridView dgv)
{

    //根据路径打开一个Excel文件并将数据填充到DataSet中

    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";//HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名

    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open();
    string strExcel = "";
    OleDbDataAdapter myCommand = null;
    DataSet ds = null;
    strExcel = "select  * from   [sheet1$]";
    myCommand = new OleDbDataAdapter(strExcel, strConn);
    ds = new DataSet();
    myCommand.Fill(ds, "table1");
    dgv.DataSource = ds.Tables[0].DefaultView;
    dgv.Columns[0].HeaderText= "Parm";
    dgv.Rows.RemoveAt(0);

}

猜你喜欢

转载自blog.csdn.net/lvxingzhe3/article/details/121876262