cindy66666 2016-07-14 13:25 采纳率: 0%
浏览 1017
已采纳

按模式导出datagridview中的表格于Excel中并且不保存

//需要添加 Microsoft.Office.Interop.Excel引用
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

        if (app == null)
        {
            //  Response.Write("服务器上缺少Excel组件,需要安装Office软件。");
            MessageBox.Show("缺少Excel组件,需要安装Office软件");
            return;
        }
         app.Visible = true;
        app.UserControl = true;
        Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
        //当前项目的绝对路径
        string str = System.Environment.CurrentDirectory;

        //  Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add("d:\\Template.xlsx"); //加载模板

        Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(str + "\\chuhuoTemplate1.xlsx"); //加载模板
        Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
        // Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(1); //第一个工作薄。
        Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)(sheets.get_Item(1));
        if (worksheet == null)
            return;  //工作薄中没有工作表.
         //1、获取数据。

        DataGridView d1 = new DataGridView();

        this.Controls.Add(d1);
        d1.Visible = false;
      DataBaseUtils db = new DataBaseUtils ();
        DataSet ds = new DataSet();
        string mysql = "select * from tbl_outdepot";
        ds = db.GetDataFromDB(mysql);

        DataTable dt = ds.Tables[0];  //--------------------------------------------------根据实际需要修改--------------!!!!!

        int rowCount = dt.Rows.Count;
        if (rowCount < 1)
            return; //没有数据,不需要导出。

        //动态加入填表日期  损耗
        worksheet.Cells[2, 2] = DateTime.Now.ToLongDateString();
        worksheet.Cells[2, 7] = "是";
        //2、写入数据,Excel索引从1开始。
          for (int i = 1; i <= rowCount; i++)
        {
            int row_ = 3 + i;  //Excel模板上表头和标题行占了3行,根据实际模板需要修改;
            int dt_row = i - 1; //dataTable的行是从0开始的。 
            worksheet.Cells[row_, 1] = i.ToString();
            worksheet.Cells[row_, 2] = dt.Rows[dt_row]["outid"].ToString();
            worksheet.Cells[row_, 3] = dt.Rows[dt_row]["outname"].ToString();
        }
         //调整Excel的样式。
        Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 8]);
        rg.Borders.LineStyle = 1; //单元格加边框。
        worksheet.Columns.AutoFit(); //自动调整列宽。
        //3、保存生成的Excel文件。
        //Missing 在System.Reflection命名空间下。


        // 添加申请人等信息
        worksheet.Cells[rowCount + 5, 1] = "出库人:" + "小张";
        worksheet.Cells[rowCount + 5, 4] = "申请人:" + "小李";
        worksheet.Cells[rowCount + 7, 1] = "审批人:" + "小松";

       string savaPath = "d:\\1\\出货单" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
        workbook.SaveAs(savaPath, 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);
                    问题是这句
 Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 8]);
    “object”未包含“get_Range”的定义
    怎么修改,之前看过的说是吧()改为[]这个不行,这个就直接连代码都是错的
  • 写回答

1条回答 默认 最新

  • threenewbee 2016-07-14 15:52
    关注

    Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 8]);
    ->
    Microsoft.Office.Interop.Excel.Range rg = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[rowCount + 2, 8];

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器