导出Excel Winfrom导出Excel。现在我已经有一个文件,并且Excel里的A1被一张图片填充我想在这个Excel里添加一张表 求助先人 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 说简单点 就是如何用代码打开一个Excel并且添加数据 参见 http://blog.csdn.net/jilm168/article/details/1869118 /// <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; } 先导入一个EXCEL到datagridview然后将数据添加到datagridview不就OK了吗 这是导入的方法 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(); } } 如果excel有多个Sheet呢,你这个只能导入第一个吧。 是啊 导入多个sheet多话 你可以strExcel = "select * from ["+tableName+"]";将这个tableName作为参数啊 调用的时候直接写要导入的sheet名字就好了 http://blog.csdn.net/wangyong0921/article/details/6550399 不对 只能导入最后一个的,要是有三个Sheet的话,导入的是第三个。schemaTable.Rows[0][2].ToString().Trim(); 看似是第一个,其实倒着排的。 非绑定列为什么不能赋值? ——————————删除mdb文件问题,进来就有分————————[问题点数:100分,结帖 关于正则匹配问题 SOS! 关于C#的问题? 为什么调用自己写的dll中的函数或类的时候写在<summary></summary>中的注释都出不来? c#中能不能用公用变量和函数? .net framework版本管理 如何返回在DataGrid上所选择的记录数量? 一个很不幸的问题发生在我身上了。。。。。。。。。。。。。 TFS自动签出了解决方案 嗯..问个很菜的问题 回帖怎么贴代码? 超时时间已到。在操作完成之前超时时间已过或服务器未响应。
/// <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;
}
然后将数据添加到datagridview不就OK了吗
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();
}
}
strExcel = "select * from ["+tableName+"]";
将这个tableName作为参数啊 调用的时候直接写要导入的sheet名字就好了
schemaTable.Rows[0][2].ToString().Trim(); 看似是第一个,其实倒着排的。