使用C#和Excel进行报表开发(八)-用程序绑定数据源

本文演示一个简单的办法,并使用程序将一个dataset中的内容填充到指定的格子中,目的是尽可能的通用,从而避免C#代码必须知道Excel文件中字段和内容的位置的情况。

先制作一个简单的Excel文件作为模板,为了防止要填充的Cell中的内容和标题的内容一样,所以要填充内容的Cell中的内容是“$” + 字段名(要和DataTable中的列名一致),效果如图:
使用C#和Excel进行报表开发(八)-用程序绑定数据源
创建一个Winform程序,给窗体上添加两个按钮,代码分别为:
创建Xml:

使用C#和Excel进行报表开发(八)-用程序绑定数据源privatevoidbutton1_Click(objectsender,EventArgse)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataColumndcName
=newDataColumn("name",typeof(string));
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataColumndcAge
=newDataColumn("age",typeof(int));
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataColumndcMemo
=newDataColumn("memo",typeof(string));
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataTabledt
=newDataTable();
使用C#和Excel进行报表开发(八)-用程序绑定数据源dt.Columns.Add(dcName);
使用C#和Excel进行报表开发(八)-用程序绑定数据源dt.Columns.Add(dcAge);
使用C#和Excel进行报表开发(八)-用程序绑定数据源dt.Columns.Add(dcMemo);
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataRowdr
=dt.NewRow();
使用C#和Excel进行报表开发(八)-用程序绑定数据源dr[
"name"]="dahuzizyd";
使用C#和Excel进行报表开发(八)-用程序绑定数据源dr[
"age"]="20";
使用C#和Excel进行报表开发(八)-用程序绑定数据源dr[
"memo"]="dahuzizyd.cnblogs.com";
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源dt.Rows.Add(dr);
使用C#和Excel进行报表开发(八)-用程序绑定数据源dt.AcceptChanges();
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataSetds
=newDataSet();
使用C#和Excel进行报表开发(八)-用程序绑定数据源ds.Tables.Add(dt);
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源ds.WriteXml(Application.StartupPath
+"\\ExcelBindingXml.xml");
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源}



提取xml并且加载到Excel模板上,再另存:

使用C#和Excel进行报表开发(八)-用程序绑定数据源privatevoidbutton2_Click(objectsender,EventArgse)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源DataSetds
=newDataSet();
使用C#和Excel进行报表开发(八)-用程序绑定数据源ds.ReadXml(Application.StartupPath
+"\\ExcelBindingXml.xml");
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源Excel.Applicationm_objExcel
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源Excel._Workbookm_objBook
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源Excel.Sheetsm_objSheets
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源Excel._Worksheetm_objSheet
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源Excel.Rangem_objRange
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
objectm_objOpt=System.Reflection.Missing.Value;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
try
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objExcel
=newExcel.Application();
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objBook
=m_objExcel.Workbooks.Open(Application.StartupPath+"\\ExcelTemplate.xls",m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt);
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objSheets
=(Excel.Sheets)m_objBook.Worksheets;
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objSheet
=(Excel._Worksheet)(m_objSheets.get_Item(1));
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
foreach(DataRowdrinds.Tables[0].Rows)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
for(intcol=0;col<ds.Tables[0].Columns.Count;col++)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
for(intexcelcol=1;excelcol<8;excelcol++)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
for(intexcelrow=1;excelrow<5;excelrow++)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
stringexcelColName=ExcelColNumberToColText(excelcol);
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objRange
=m_objSheet.get_Range(excelColName+excelrow.ToString(),m_objOpt);
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
if(m_objRange.Text.ToString().Replace("$","")==ds.Tables[0].Columns[col].ColumnName)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objRange.Value2
=dr[col].ToString();
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objExcel.DisplayAlerts
=false;
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objBook.SaveAs(Application.StartupPath
+"\\ExcelBindingXml.xls",m_objOpt,m_objOpt,
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objOpt,m_objOpt,m_objOpt,Excel.XlSaveAsAccessMode.xlNoChange,
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objOpt,m_objOpt,m_objOpt,m_objOpt,m_objOpt);
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
catch(Exceptionex)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源MessageBox.Show(ex.Message);
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
finally
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objBook.Close(m_objOpt,m_objOpt,m_objOpt);
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objExcel.Workbooks.Close();
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objExcel.Quit();
使用C#和Excel进行报表开发(八)-用程序绑定数据源System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
使用C#和Excel进行报表开发(八)-用程序绑定数据源System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objBook
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源m_objExcel
=null;
使用C#和Excel进行报表开发(八)-用程序绑定数据源GC.Collect();
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源}


下面是一个辅助函数,主要是将整数的列序号转换到Excel用的以字母表示的列号,Excel最大列数为255。

使用C#和Excel进行报表开发(八)-用程序绑定数据源privatestringExcelColNumberToColText(intcolNumber)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
stringcolText="";
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
intcolTextLength=colNumber/26;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
intcolTextLast=colNumber%26;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
if(colTextLast!=0)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
switch(colTextLength)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case0:break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case1:colText="A";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case2:colText="B";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case3:colText="C";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case4:colText="D";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case5:colText="E";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case6:colText="F";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case7:colText="G";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case8:colText="H";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case9:colText="I";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
default:break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
else
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
switch(colTextLength)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case1:colText="";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case2:colText="A";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case3:colText="B";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case4:colText="C";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case5:colText="D";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case6:colText="E";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case7:colText="F";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case8:colText="G";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case9:colText="H";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
default:break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
switch(colTextLast)
使用C#和Excel进行报表开发(八)-用程序绑定数据源使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源{
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case0:colText=colText+"Z";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case1:colText=colText+"A";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case2:colText=colText+"B";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case3:colText=colText+"C";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case4:colText=colText+"D";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case5:colText=colText+"E";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case6:colText=colText+"F";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case7:colText=colText+"G";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case8:colText=colText+"H";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case9:colText=colText+"I";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case10:colText=colText+"J";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case11:colText=colText+"K";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case12:colText=colText+"L";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case13:colText=colText+"M";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case14:colText=colText+"N";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case15:colText=colText+"O";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case16:colText=colText+"P";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case17:colText=colText+"Q";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case18:colText=colText+"R";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case19:colText=colText+"S";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case20:colText=colText+"T";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case21:colText=colText+"U";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case22:colText=colText+"V";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case23:colText=colText+"W";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case24:colText=colText+"X";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
case25:colText=colText+"Y";break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
default:break;
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

使用C#和Excel进行报表开发(八)-用程序绑定数据源
使用C#和Excel进行报表开发(八)-用程序绑定数据源
returncolText;
使用C#和Excel进行报表开发(八)-用程序绑定数据源}

运行完成后,生成的Excel如下图:
使用C#和Excel进行报表开发(八)-用程序绑定数据源