Microsoft.Office.Interop.Excel.Application ThisApplication = new Application();         Microsoft.Office.Interop.Excel._Workbook ThisWorkbook = null;        Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;        object missing = System.Reflection.Missing.Value;
        string strOpenFileName = Server.MapPath("~/Print/MARKET/工业品买卖合同.xls");            //定义模板Excel路径        //打开模板Excel
        ThisWorkbook = ThisApplication.Workbooks.Open(strOpenFileName, missing,
            missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);        xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)ThisWorkbook.Sheets[1];         //获取绘制的第一个Sheet        int gENRowsNum = grvEngineeringName.Rows.Count;                                     //定义页面工程名称的行数
        int gEDRowsNum = grvEquipmentDetail.Rows.Count;                                     //定义页面设备明细的行数        Range range = xlSheet.get_Range(xlSheet.Cells[6, "d"], xlSheet.Cells[6, "g"]);      //获取工程合同编号值的位置
        range.set_Value(missing, lblContractCd.Text.ToString());                            //给工程编号赋值        range = xlSheet.get_Range(xlSheet.Cells[6, "k"], xlSheet.Cells[6, "n"]);            //获取需方公司名称的位置
        range.set_Value(missing, lblDeCo.Text.ToString());                                  //给需方公司名称赋值        range = xlSheet.get_Range(xlSheet.Cells[7, "d"], xlSheet.Cells[7, "g"]);            //获取合同额的位置
        range.set_Value(missing, lblAmount.Text.ToString());                                //给合同额赋值        range = xlSheet.get_Range(xlSheet.Cells[7, "k"], xlSheet.Cells[7, "n"]);            //获取质保金的位置
        range.set_Value(missing, lblGuaranty.Text.ToString());                              //给质保金赋值        range = xlSheet.get_Range(xlSheet.Cells[8, "d"], xlSheet.Cells[8, "g"]);            //获取合同签订日的位置
        range.set_Value(missing, lblEndorsementDate.Text.ToString());                       //给合同签订日赋值        range = xlSheet.get_Range(xlSheet.Cells[8, "k"], xlSheet.Cells[8, "n"]);            //获取合同签订地的位置
        range.set_Value(missing, lblEndorsementAddress.Text.ToString());                    //给合同签订地赋值        range = xlSheet.get_Range(xlSheet.Cells[9, "d"], xlSheet.Cells[9, "g"]);            //获取交货期的位置
        range.set_Value(missing, lblConsignmentTime.Text.ToString());                       //给交货期赋值        range = xlSheet.get_Range(xlSheet.Cells[9, "k"], xlSheet.Cells[9, "n"]);            //获取合同签订人的位置
        range.set_Value(missing, lblUserCd.Text.ToString());                                //给合同签订人赋值        //从工程项目名称的最后一行开始插入一行
        for (int i = gENRowsNum - 1; i >= 0; i--)
        {
            xlSheet.get_Range(xlSheet.Cells[13, "a"], xlSheet.Cells[13, "f"]).EntireRow.Insert(missing, missing); //插入新的一行
            range = xlSheet.get_Range(xlSheet.Cells[13, "a"], xlSheet.Cells[13, "f"]);                            //获取工程项目名称的位置
            range.MergeCells = true;                                                                              //合并单元格
            //给合并单元格赋值
            range.set_Value(missing, (grvEngineeringName.Rows[i].Cells[0].FindControl("labEngineeringName")as System.Web.UI.WebControls.Label).Text.ToString());
            range.Font.Bold = false;                                                                              //单元格内字体不加粗
        }        range = xlSheet.get_Range(xlSheet.Cells[12, "g"], xlSheet.Cells[12 + gENRowsNum, "n"]);
        range.MergeCells = true;        for (int i = gEDRowsNum - 1; i >= 0; i--)
        {
            xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "a"], xlSheet.Cells[16 + gENRowsNum, "n"]).EntireRow.Insert(missing, missing);            range = xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "a"], xlSheet.Cells[16 + gENRowsNum, "c"]);
            range.MergeCells = true;
            range.set_Value(missing, (grvEquipmentDetail.Rows[i].Cells[0].FindControl("labEquipmentName") as System.Web.UI.WebControls.Label).Text.ToString());
            range.Font.Bold = false;
            range.Borders.LineStyle = 1;            range = xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "d"], xlSheet.Cells[16 + gENRowsNum, "f"]);
            range.MergeCells = true;
            range.set_Value(missing, (grvEquipmentDetail.Rows[i].Cells[0].FindControl("labSpecification") as System.Web.UI.WebControls.Label).Text.ToString());
            range.Font.Bold = false;
            range.Borders.LineStyle = 1;            range = xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "g"], xlSheet.Cells[16 + gENRowsNum, "g"]);
            xlSheet.Cells[16 + gENRowsNum, "g"] = (grvEquipmentDetail.Rows[i].Cells[0].FindControl("labCount") as System.Web.UI.WebControls.Label).Text.ToString();
            range.Font.Bold = false;
            range.Borders.LineStyle = 1;            range=xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "h"], xlSheet.Cells[16 + gENRowsNum, "h"]);
            xlSheet.Cells[16 + gENRowsNum, "h"] = (grvEquipmentDetail.Rows[i].Cells[0].FindControl("labUnit") as System.Web.UI.WebControls.Label).Text.ToString();
            range.Font.Bold = false;
            range.Borders.LineStyle = 1;            range = xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "i"], xlSheet.Cells[16 + gENRowsNum, "j"]);
            range.MergeCells = true;
            range.set_Value(missing, (grvEquipmentDetail.Rows[i].Cells[0].FindControl("labPrice") as System.Web.UI.WebControls.Label).Text.ToString());
            range.Font.Bold = false;        }        range = xlSheet.get_Range(xlSheet.Cells[16 + gENRowsNum, "k"], xlSheet.Cells[16 + gENRowsNum + gEDRowsNum - 1, "n"]);
        range.MergeCells = true;
        range.set_Value(missing, (grvEquipmentDetail.Rows[0].Cells[0].FindControl("labRe") as System.Web.UI.WebControls.Label).Text.ToString());
        range.Font.Bold = false;
        range.Borders.LineStyle = 1; //绘制边框
        range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;        range = xlSheet.get_Range(xlSheet.Cells[17 + gEDRowsNum + gENRowsNum, "c"], xlSheet.Cells[17 + gEDRowsNum + gENRowsNum, "e"]);
        range.set_Value(missing, lblAmount1.Text.ToString());        range = xlSheet.get_Range(xlSheet.Cells[19 + gEDRowsNum + gENRowsNum, "c"], xlSheet.Cells[19 + gEDRowsNum + gENRowsNum, "n"]);
        range.set_Value(missing, lblItem1.Text.ToString());        range = xlSheet.get_Range(xlSheet.Cells[21 + gEDRowsNum + gENRowsNum, "f"], xlSheet.Cells[21 + gEDRowsNum + gENRowsNum, "n"]);
        range.set_Value(missing, lblItem2.Text.ToString());        range = xlSheet.get_Range(xlSheet.Cells[23 + gEDRowsNum + gENRowsNum, "d"], xlSheet.Cells[23 + gEDRowsNum + gENRowsNum, "n"]);
        range.set_Value(missing, lblItem3.Text.ToString());        range = xlSheet.get_Range(xlSheet.Cells[25 + gEDRowsNum + gENRowsNum, "g"], xlSheet.Cells[25 + gEDRowsNum + gENRowsNum, "n"]);
        range.set_Value(missing, lblItem4.Text.ToString());        range = xlSheet.get_Range(xlSheet.Cells[27 + gEDRowsNum + gENRowsNum, "d"], xlSheet.Cells[27 + gEDRowsNum + gENRowsNum, "n"]);
        range.set_Value(missing, lblItem5.Text.ToString());        range = xlSheet.get_Range(xlSheet.Cells[29 + gEDRowsNum + gENRowsNum, "e"], xlSheet.Cells[29 + gEDRowsNum + gENRowsNum, "n"]);
        range.set_Value(missing, lblItem6.Text.ToString());            //更新数据后另存为新文件
        //xlSheet.SaveAs(@"MARKET103_01.xls", missing,
        //    missing, missing, missing, missing, missing, missing, missing, missing);        //      不显示确认对话框   
        //ThisApplication.Application.DisplayAlerts = false; 
  
        ThisApplication.Quit();
        ThisWorkbook = null;
        ThisApplication = null; 

解决方案 »

  1.   

    既然 都有模板了 那你只能 一个一个的单元格 赋值吧
    要是没有 模板 可以用 table  直接输出 excel
      

  2.   


            /// <summary>
            ///方法,导出DataGridView中的数据到Excel文件
            /// </summary>
            /// <param   name= "dgv "> DataGridView </param>
            public static void DataGridViewToExcel(DataGridView dgv)
            {
                #region   验证可操作性
                
                //申明保存对话框
                SaveFileDialog dlg = new SaveFileDialog();
                //默然文件后缀
                dlg.DefaultExt = "xls ";
                //文件后缀列表
                dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
                //默然路径是系统当前路径
                dlg.InitialDirectory = Directory.GetCurrentDirectory();
                //打开保存对话框
                dlg.ShowDialog();
                //返回文件路径
                string fileNameString = dlg.FileName;
                //验证strFileName是否为空或值无效
                if (fileNameString.Trim() == "")
                { return; }
                //定义表格内数据的行数和列数
                int rowscount = dgv.Rows.Count;
                int colscount = dgv.Columns.Count;
                //行数必须大于0
                if (rowscount <= 0)
                {
                    MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //列数必须大于0
                if (colscount <= 0)
                {
                    MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //行数不可以大于65536
                if (rowscount > 65536)
                {
                    MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //列数不可以大于255
                if (colscount > 255)
                {
                    MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }            //验证以fileNameString命名的文件是否存在,如果存在删除它
                FileInfo file = new FileInfo(fileNameString);
                if (file.Exists)
                {
                    try
                    {
                        file.Delete();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }
                #endregion
                Excel.Application objExcel = null;
                Excel.Workbook objWorkbook = null;
                Excel.Worksheet objsheet = null;
                try
                {
                    //申明对象
                    objExcel = new Microsoft.Office.Interop.Excel.Application();
                    objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                    objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;
                    //设置EXCEL不可见
                    objExcel.Visible = false;                //向Excel中写入表格的表头
                    int displayColumnsCount = 1;
                    for (int i = 0; i <= dgv.ColumnCount - 1; i++)
                    {
                        if (dgv.Columns[i].Visible == true&&dgv.Columns[i].Name.ToString()!="hide")
                        {
                            objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                            displayColumnsCount++;
                        }
                    }
                    //设置进度条
                    //tempProgressBar.Refresh();
                    //tempProgressBar.Visible   =   true;
                    //tempProgressBar.Minimum=1;
                    //tempProgressBar.Maximum=dgv.RowCount;
                    //tempProgressBar.Step=1;
                    //向Excel中逐行逐列写入表格中的数据
                    for (int row = 0; row <= dgv.RowCount - 1; row++)
                    {
                        //tempProgressBar.PerformStep();                    displayColumnsCount = 1;
                        for (int col = 0; col < colscount; col++)
                        {
                            if (dgv.Columns[col].Visible == true)
                            {
                                if (dgv.Rows[row].Cells[col].Value != null)
                                {
                                    objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                }
                                displayColumnsCount++;
                            }
                        }
                    }
                    //隐藏进度条
                    //tempProgressBar.Visible   =   false;
                    //保存文件
                    objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                            Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                            Missing.Value, Missing.Value);
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                finally
                {
                    //关闭Excel应用
                    if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
                    if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
                    if (objExcel != null) objExcel.Quit();                objsheet = null;
                    objWorkbook = null;
                    objExcel = null;
                }
                MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);        }
      

  3.   

    4搂 你这是 写入一个空的 Excel 吧
    不是写到 模板里吧
      

  4.   

    急需 : 给个源码: 邮箱:[email protected]  谢谢了