读书人

Winform导出Excel有关问题

发布时间: 2012-04-07 17:31:52 作者: rapoo

Winform导出Excel问题
现查询返回一个DataTable,分组后导出至一个Excle文件中,要求每组数据放在一个工作表中(Sheet)。请问怎样实现?并且要将每个Sheet的名字更改为数据中的某一个列,如查询出来NO,Name。。。。。No非主键,相同的可能有多条,将每个Sheet的名字设置为No。麻烦知道的说下!!!急~~~~~~

[解决办法]
看看这个http://www.cnblogs.com/lingyun_k/archive/2005/11/07/271068.html

[解决办法]
导出到 Excel 中多个工作表(Sheet) 的方法
[解决办法]

探讨
引用:

导出到 Excel 中多个工作表(Sheet) 的方法

这个是asp.net里面的,我需要的是winform里面的导出Excel文件的!

[解决办法]
就是生成xml格式的excel文件,直接写成文件就可以了,可以生成多个Sheet。
你还可以使用Excel.Application来实现
[解决办法]
private void btn_Dc_Click(object sender, EventArgs e)
{
if (lbl_SAMPLE_ID.Text == "lbl_SAMPLE_IDNone")
{
MsgBox.alert(ReturnTck.getTck("tck_tjbb_01"));
return;
}
g_strSql = @"select a.DataCell_ID,ParentCell_ID,APPLI_OLDNAME,APPLI_NAME,a.APPLI_TYPE,Cell_No,Config_Start,
Start_Bit,Config_Over,Over_Bit,Config_AValue,Config_BValue,b.APPLI_TYPE,MODE_MIN,MODE_MAX
from Basic_dataCell a left join Sys_Config b on a.DataCell_ID=b.DataCell_ID
where a.Sample_ID='" + lbl_SAMPLE_ID.Text + "' order by ParentCell_ID,Cell_No";
DataTable m_dtExcel = MySqlHelper.ExecuteDataTable(g_strSql);
if (m_dtExcel.Rows.Count > 0)
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = excel.Application.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range = null;
excel.Visible = true;

long rowRead = 0;

for (int i = 0; i < m_dtExcel.Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = m_dtExcel.Columns[i].ColumnName;
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
}
//写入数值
for (int r = 0; r < m_dtExcel.Rows.Count; r++)
{
for (int i = 0; i < m_dtExcel.Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = "'" + m_dtExcel.Rows[r][i];
}
rowRead++;
}

}
}
[解决办法]
SqlConnection sqlcon = new SqlConnection("user id=sa;password=towin-2;initial catalog=lianxi;data source=.;connect Timeout=20");
//定义SqlConnection对象实例并连接数据库


SqlDataAdapter myda; //定义SqlDataAdapter对象实例


DataSet myds; //定义DataSet对象实例



public bool ExportDataGridview(DataGridView dgv, bool isShowExcle)

{

if (dgv.Rows.Count == 0)
return false;

//建立Excel对象

Excel.Application excel = new Excel.Application();

excel.Application.Workbooks.Add(true);

excel.Visible = isShowExcle;
//生成字段名称



for (int i = 0; i < dgv.ColumnCount; i++)

{

excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;

}


//填充数据

for (int i = 0; i < dgv.RowCount - 1; i++)

{

for (int j = 0; j < dgv.ColumnCount; j++)

{

if (dgv[j, i].ValueType == typeof(string))

{

excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();

}

else

{

excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();

}

}

}

return true;

}




private void button1_Click(object sender, EventArgs e)

{

//调用自定义函数ExportDataGridview

ExportDataGridview(dataGridView1, true);

}



private void Form1_Load(object sender, EventArgs e)

{

myda = new SqlDataAdapter("select * from logo", sqlcon);

myds = new DataSet();

sqlcon.Open();

myda.Fill(myds);

sqlcon.Close();

dataGridView1.DataSource = myds.Tables[0];

}
[解决办法]
一般俺都是使用 xml 变换实现的。。

读书人网 >.NET Framework

热点推荐