C# winform 如何导出EXCEL winform 中的panl内有datagridview 及一些lable ,请教如何实现将整个panl的数据导出到EXCEL中? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 datagid里面的数据导出到EXCEL还差不多,你还想讲label 也导出到EXCEL 不会期待~~~~ 这个确实得学习下,主要思想是安装EXCEL,然后再添加office的Office.Interop.Excel引用,在代码里面要USING下,然后就能操作了,新建EXCEL文件,新建工作簿,对工作簿里面数据操作,等等在C#中循环写入就好了,大概思想就是这样,刚把VS卸了没法给你写了,具体代码你可以百度上搜下,挺多的,这个导出功能用的超多,而且要求也不只是导出这么简单,多学习,自己多敲敲,很有用。 class ExportByDataGridView { protected internal ExportByDataGridView(DataGridView DGV,ExcelExport excelExport) { this.dgv = DGV; this.excelExport = excelExport; } [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int id); protected internal DataGridView dgv { get; set; } protected internal ExcelExport excelExport { get; set; } private object m_objOpt = System.Reflection.Missing.Value; protected internal ExcelW.Application MyXls { get; set; } protected internal ExcelW.Workbook workbook { get; set; } //导出 protected internal void Export() { workbook = MyXls.Workbooks.Add(ExcelW.XlWBATemplate.xlWBATWorksheet); ExcelW.Worksheet outBoxWorkSheet = (ExcelW.Worksheet)workbook.Worksheets[1]; outBoxWorkSheet.Name = "sheet1"; //显示表头 for (int i = 0; i < dgv.ColumnCount; i++) { MyXls.Cells[1, i + 1] = dgv.Columns[i].HeaderText; this.excelExport.Value++; } //显示内容 int outBoxCount = dgv.RowCount; for (int i = 0; i < outBoxCount; i++) { //excelApp.Cells[i + 3, 1] = i + 0; for (int j = 0; j < dgv.ColumnCount; j++) { if (dgv[j,i].Value != null) { if (dgv[j, i].Value.GetType() == typeof(string)) { MyXls.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString(); } else { MyXls.Cells[i + 2, j + 1] = dgv[j,i].Value.ToString(); } } this.excelExport.Value++; } } workbook.SaveCopyAs(excelExport.filePath); if (excelExport.ShowAfterExport) MyXls.Application.Visible = true; else { try { if (MyXls != null) { IntPtr t = new IntPtr(MyXls.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill(); } } catch { } } } }以上为DataGridView导出到Excel 仅供参考,如果要将label内容也导出到Excel就需要在导出的过程中进行修改了 自定义一个将DataGridView控件中数据导出到Excel函数 /// <summary> /// 将DataGridView控件中数据导出到Excel /// </summary> /// <param name="gridView">DataGridView对象</param> /// <param name="isShowExcle">是否显示Excel界面</param> /// <returns></returns> public bool ExportDataGridview(DataGridView gridView,bool isShowExcle) { if (gridView.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 < gridView.ColumnCount; i++) { excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText; } //填充数据 for (int i = 0; i < gridView.RowCount-1; i++) { for (int j = 0; j < gridView.ColumnCount; j++) { if (gridView[j, i].ValueType == typeof(string)) { excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString(); } else { excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString(); } } } return true; } foreach(Control c in this.panel1.Controls){ if(c is DataGridView){} if(c is Label){}}datagridview导出EXCELhttp://topic.csdn.net/u/20100312/14/4159d5ec-43ad-4f41-bc73-9a97421eadc6.html 如果你的文本都是简单的字符串,你可以直接用tab字符分割列的形式写到一个文本文件,然后把那个文本文件的后缀写成.xls哈哈哈 C# WinForm开发系列 - Excel 如果都是文字,使用myxls如果还有别的,使用Com组件http://blog.bossma.cn/dotnet/csharp-exorpt-excel-process-kill/http://blog.bossma.cn/dotnet/myxls-export-excel/ 给你一个将datagridview 数据导出excel的例子,不用引用什么Excel的,直接把StreamWriter转换为excel 文件private void DataGridViewToExcel(DataGridView dgv) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Execl files (*.xls)|*.xls"; dlg.FilterIndex = 0; dlg.RestoreDirectory = true; dlg.CreatePrompt = false; dlg.Title = "保存为Excel文件"; dlg.FileName = this.comViewName.Text + DateTime.Now.ToString("yyMMddHHmmss"); if (dlg.ShowDialog() == DialogResult.OK) { Stream myStream; myStream = dlg.OpenFile(); StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); string columnTitle = ""; try { //写入列标题 for (int i = 0; i < dgv.ColumnCount; i++) { if (i > 0) { columnTitle += "\t"; } columnTitle += dgv.Columns[i].HeaderText; } sw.WriteLine(columnTitle); //写入列内容 for (int j = 0; j < dgv.Rows.Count; j++) { string columnValue = ""; for (int k = 0; k < dgv.Columns.Count; k++) { if (k > 0) { columnValue += "\t"; } if (dgv.Rows[j].Cells[k].Value == null) columnValue += ""; else columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim(); } sw.WriteLine(columnValue); } sw.Close(); myStream.Close(); } catch (Exception e) { MessageBox.Show(e.ToString()); } finally { sw.Close(); myStream.Close(); } } } string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";DataSet ds= new DataSet();using(OleDbConnection OleConn = new OleDbConnection(strConn)){ OleConn.Open(); String sql = "SELECT * FROM [Sheet1$]"; OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); OleDaExcel.Fill(ds); OleConn.Close();}foreach(DataRow dr in ds.Tables[0].Rows){//遍历Console.Write(dt[""].ToString()+"\n"); 先把lable文本值添加到Excel中再遍历datagridview添加到Excel中去。Excel操作知识总集:http://www.cnblogs.com/peterzb/archive/2009/07/06/1517395.html private void ExportFile() { try { string filename = ""; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*"; saveFileDialog1.Title = "保存文件"; saveFileDialog1.FileName = this.Text + @".xls"; if ((saveFileDialog1.ShowDialog()) == DialogResult.OK) { filename = saveFileDialog1.FileName; this.ultraGridExcelExporter1.Export(this.ultraGrid1, filename); System.Diagnostics.ProcessStartInfo st = new System.Diagnostics.ProcessStartInfo(filename); st.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized; System.Diagnostics.Process.Start(st); MessageBox.Show("数据导出成功!!!"); } else { return; } } catch (Exception ex) { Console.WriteLine(ex.ToString()); MessageBox.Show("数据导出出错!!!"); } finally { //ok } } 【那个好心人帮我看看啊?】使用XmlReader类读取XML文件???? 关于datatable的merge()方法 C#读内存数据 实现自动登录网站,并自动跳动到指定连接。马上给分 如何取得视频文件的时间 那错了???xml解析??急!!高手指教!!!!! 高手帮忙,listview中能不能加入进度条? 怎样防止往文本框中复制进字符(我已编写代码使文本框只能输入数字)? 怎样把一个进度条加到StatusBar上? WPF,如何开机启动 关于WPF的DPI问题~ 数据导出Excel的问题
你还想讲label 也导出到EXCEL 不会期待~~~~
{
protected internal ExportByDataGridView(DataGridView DGV,ExcelExport excelExport)
{
this.dgv = DGV;
this.excelExport = excelExport;
} [DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int id); protected internal DataGridView dgv { get; set; }
protected internal ExcelExport excelExport { get; set; } private object m_objOpt = System.Reflection.Missing.Value;
protected internal ExcelW.Application MyXls { get; set; }
protected internal ExcelW.Workbook workbook { get; set; }
//导出
protected internal void Export()
{
workbook = MyXls.Workbooks.Add(ExcelW.XlWBATemplate.xlWBATWorksheet); ExcelW.Worksheet outBoxWorkSheet = (ExcelW.Worksheet)workbook.Worksheets[1];
outBoxWorkSheet.Name = "sheet1"; //显示表头
for (int i = 0; i < dgv.ColumnCount; i++)
{
MyXls.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
this.excelExport.Value++;
}
//显示内容
int outBoxCount = dgv.RowCount;
for (int i = 0; i < outBoxCount; i++)
{
//excelApp.Cells[i + 3, 1] = i + 0; for (int j = 0; j < dgv.ColumnCount; j++)
{
if (dgv[j,i].Value != null)
{
if (dgv[j, i].Value.GetType() == typeof(string))
{
MyXls.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
}
else
{
MyXls.Cells[i + 2, j + 1] = dgv[j,i].Value.ToString();
}
}
this.excelExport.Value++;
}
} workbook.SaveCopyAs(excelExport.filePath);
if (excelExport.ShowAfterExport)
MyXls.Application.Visible = true;
else
{
try
{
if (MyXls != null)
{
IntPtr t = new IntPtr(MyXls.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
}
catch
{
}
}
}
}
以上为DataGridView导出到Excel 仅供参考,如果要将label内容也导出到Excel就需要在导出的过程中进行修改了
/// <summary>
/// 将DataGridView控件中数据导出到Excel
/// </summary>
/// <param name="gridView">DataGridView对象</param>
/// <param name="isShowExcle">是否显示Excel界面</param>
/// <returns></returns>
public bool ExportDataGridview(DataGridView gridView,bool isShowExcle)
{
if (gridView.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 < gridView.ColumnCount; i++)
{
excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText;
}
//填充数据
for (int i = 0; i < gridView.RowCount-1; i++)
{
for (int j = 0; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString();
}
}
}
return true;
}
{
if(c is DataGridView){}
if(c is Label){}
}
datagridview导出EXCEL
http://topic.csdn.net/u/20100312/14/4159d5ec-43ad-4f41-bc73-9a97421eadc6.html
如果还有别的,使用Com组件http://blog.bossma.cn/dotnet/csharp-exorpt-excel-process-kill/
http://blog.bossma.cn/dotnet/myxls-export-excel/
private void DataGridViewToExcel(DataGridView dgv)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Execl files (*.xls)|*.xls";
dlg.FilterIndex = 0;
dlg.RestoreDirectory = true;
dlg.CreatePrompt = false;
dlg.Title = "保存为Excel文件";
dlg.FileName = this.comViewName.Text + DateTime.Now.ToString("yyMMddHHmmss"); if (dlg.ShowDialog() == DialogResult.OK)
{
Stream myStream;
myStream = dlg.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
string columnTitle = "";
try
{
//写入列标题
for (int i = 0; i < dgv.ColumnCount; i++)
{
if (i > 0)
{
columnTitle += "\t";
}
columnTitle += dgv.Columns[i].HeaderText;
}
sw.WriteLine(columnTitle); //写入列内容
for (int j = 0; j < dgv.Rows.Count; j++)
{
string columnValue = "";
for (int k = 0; k < dgv.Columns.Count; k++)
{
if (k > 0)
{
columnValue += "\t";
}
if (dgv.Rows[j].Cells[k].Value == null)
columnValue += "";
else
columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
}
sw.WriteLine(columnValue);
}
sw.Close();
myStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
}
DataSet ds= new DataSet();
using(OleDbConnection OleConn = new OleDbConnection(strConn))
{
OleConn.Open();
String sql = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); OleDaExcel.Fill(ds);
OleConn.Close();
}
foreach(DataRow dr in ds.Tables[0].Rows)
{
//遍历Console.Write(dt[""].ToString()+"\n");
再遍历datagridview添加到Excel中去。Excel操作知识总集:http://www.cnblogs.com/peterzb/archive/2009/07/06/1517395.html
{
try
{
string filename = "";
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*";
saveFileDialog1.Title = "保存文件"; saveFileDialog1.FileName = this.Text + @".xls";
if ((saveFileDialog1.ShowDialog()) == DialogResult.OK)
{
filename = saveFileDialog1.FileName;
this.ultraGridExcelExporter1.Export(this.ultraGrid1, filename);
System.Diagnostics.ProcessStartInfo st = new System.Diagnostics.ProcessStartInfo(filename);
st.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
System.Diagnostics.Process.Start(st);
MessageBox.Show("数据导出成功!!!");
}
else
{
return;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
MessageBox.Show("数据导出出错!!!");
}
finally
{
//ok
}
}