Winfrom导出Excel。
现在我已经有一个文件,并且Excel里的A1被一张图片填充我想在这个Excel里添加一张表 
求助先人

解决方案 »

  1.   

    说简单点 就是如何用代码打开一个Excel并且添加数据
      

  2.   

    参见 http://blog.csdn.net/jilm168/article/details/1869118
      

  3.   


      /// <summary>
            /// 打开EXCEL 写入DataGridView中的数据  完成后显示excel 
            /// </summary>
            /// <param name="dg"></param>
            public static void input_excel2(DataGridView dg)
            {
                Excel._Worksheet Sht;
                Excel._Workbook Bo;
                Excel.Application excel = new Excel.Application();
                Bo = excel.Application.Workbooks.Add(true);
                // excel.Visible = true;
                Sht = (Excel.Worksheet)Bo.Sheets[1];
                //写入数据到EXCEL
                int Rowed = 0;           
                if (dg.AllowUserToAddRows == true)
                {              
                    for (int i = 0; i < dg.Rows.Count; i++)
                    {
                        for (int y = 1; y <= dg.ColumnCount; y++)
                        {
                            excel.Cells[1, y] = dg.Columns[y - 1].HeaderText;
                        }
                        Rowed++;
                        if (Rowed < 65000)
                        {
                            for (int lie = 0; lie < dg.ColumnCount; lie++)
                            {
                                excel.Cells[Rowed + 1, lie + 1] = Convert.ToString(dg[lie, i].Value);
                            }
                        }
                        else
                        {
                            Sht = (Excel.Worksheet)Bo.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                            Rowed = 0;
                            i--;
                        }
                    }
                }
                else
                {               
                    for (int i = 0; i < dg.Rows.Count; i++)
                    {
                        for (int y = 1; y <= dg.ColumnCount; y++)
                        {
                            excel.Cells[1, y] = dg.Columns[y - 1].HeaderText;
                        }
                        Rowed++;
                        if (Rowed < 65000)
                        {
                            for (int lie = 0; lie < dg.ColumnCount; lie++)
                            {
                                excel.Cells[Rowed + 1, lie + 1] = Convert.ToString(dg[lie, i].Value);
                            }
                        }
                        else
                        {
                            Sht = (Excel.Worksheet)Bo.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                            Rowed = 0;
                            i--;
                        }
                    }
                }          
                excel.Visible = true;
            }
      

  4.   

    先导入一个EXCEL到datagridview
    然后将数据添加到datagridview不就OK了吗
      

  5.   

    这是导入的方法
     public void EcxelToDataGridView(string filePath, DataGridView dgv)
            {
                dgv.Columns.Clear();
                dgv.DataSource = null;
                //根据路径打开一个excel文件并将数据填充到dataset中
                dgv.Columns.Add("Url", "网址");
                string strConn = @"Provider = Microsoft.Ace.OLEDB.12.0; Data Source = " + filePath + "; Extended Properties = 'Excel 12.0;HDR = Yes; IMEX=1'";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                string strExcel = "";
                DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                string tableName = schemaTable.Rows[0][2].ToString().Trim();
                strExcel = "select * from ["+tableName+"]";
                OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
                DataSet ds = new DataSet();
                ds.Clear();
                myCommand.Fill(ds, "table1");
                //根据DataGridView的列构造一个DataTable
                DataTable td = ds.Tables[0];
                try
                {
                    #region 小问题
                    //if (td.Columns.Count > 1)
                    //{
                    dgv.Rows.Clear();
                    dgv.Columns.Clear();
                    foreach (DataGridViewColumn dgvc in dgv.Columns)
                    {
                        if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
                        {
                            DataColumn dc = new DataColumn();
                            dc.ColumnName = dgvc.DataPropertyName;
                            dc.DataType = dgvc.ValueType;
                            td.Columns.Add(dc);
                        }
                    }                //根据excel的行逐一对上面的构造的datatable的列进行赋值
                    DataRow dr = td.NewRow();
                    for (int i = 0; i < ds.Tables["table1"].Rows.Count; i++)
                    {
                        DataRow excelRow = ds.Tables["table1"].Rows[i];
                        for (int j = 0; j < td.Columns.Count; j++)
                        {
                            dr[j] = excelRow[j];
                            i++;
                        }
                    }
                    td.Rows.Add(dr);
                    dgv.DataSource = td;
                    #endregion
                }
                catch (Exception)
                {
                    MessageBox.Show("该表已存在你即将导入的excel文件...,请点击清空按钮重新导入...");
                    return;
                }
                finally
                {
                    conn.Close();
                }
            }
      

  6.   

    如果excel有多个Sheet呢,你这个只能导入第一个吧。
      

  7.   

    是啊 导入多个sheet多话 你可以
    strExcel = "select * from ["+tableName+"]";
    将这个tableName作为参数啊 调用的时候直接写要导入的sheet名字就好了
      

  8.   

    http://blog.csdn.net/wangyong0921/article/details/6550399
      

  9.   

    不对 只能导入最后一个的,要是有三个Sheet的话,导入的是第三个。
    schemaTable.Rows[0][2].ToString().Trim();  看似是第一个,其实倒着排的。