求助:如何将数据填入到指定的EXCEL文件中?

时间:2022-11-06 10:59:49
现有一个EXCEL的模板。其格式如下:

        标题部分
-----------------
    表格部分:用于填写数据
-----------------
        脚注部分             页码

现要求将数据库中读出的数据填到“表格部分”,对应的数据字段填写到相应的表格中。如果一张纸的表格填不下,则填写第二张纸。
该功能如何实现?由于以前没有做过excel相关的编程,所以高手们最好能够给出示例代码,兄弟谢过了!!!

11 个解决方案

#1


友情UP

#2


http://topic.csdn.net/t/20050310/12/3839773.html

#3


用csv格式存吧

#4


自己顶一下

#5


http://www.cnblogs.com/dahuzizyd/category/64340.html

#6



您也可以先制作好模版,用Microsoft.Office.Interop.Excel.ApplicationClass把xsl文件打开后,参考下列方式添数据就行了。
你还可以设置字体,格式等等各种各样的内容。 
http://blog.csdn.net/mysticboys/archive/2006/04/12/660860.aspx

 /// <summary>
  /// 把指定的DataSet中的内容导出到Excel中.
  /// </summary>
  /// <param name="ds">ds参数为DateSet对象</param>
  /// <param name="ImpStr">该字符串用来指定一些字段来导出,其使用格式为:aaa|AAA,bbb|BBB   小写字符串为在Excel表中显示该字段的列标题,大写表示字段名.不同字段使用逗号分隔.</param>
  /// <param name="locR">数据导出到Excel中的开始行</param>
  /// <param name="locC">数据导出到Excel中的开始列</param>
  /// <param name="TitleStr">该字符串用来指定要导出的表和表的标题其格式为:aaa|AAA,bbb|BBB   小写为该表中显示的标题,大写为表名称.不同表使用逗号分隔</param>
  /// <param name="TilteLocR">显示标题的行</param>
  /// <param name="TitleLocC">显示标题的列</param>
  /// <param name="ColTitleColorIndex">列标题颜色索引</param>
  /// <example>Import2Excel(this.dsData ,"用户名|USERNAME,登录名|LOGINNAME",3,1,"用户名列表|BILL_USER",1,2 ,12);</example>
  private void Import2Excel(System.Data.DataSet ds,string ImpStr ,int locR,int locC,string TitleStr,int TilteLocR, int TitleLocC,int ColTitleColorIndex )
  {
   //加载Excel
   Microsoft.Office.Interop.Excel.ApplicationClass ex=new Microsoft.Office.Interop.Excel.ApplicationClass();
   ex.Visible=true ;//显示Excel
   if (ex==null)
   {
    //无法显示时报错
   MessageBox.Show("无法启动 Microsoft Office Excel,导出失败!","Import2Excel", MessageBoxButtons.OK,MessageBoxIcon.Stop );
   return ;
   }
   string[] tles=TitleStr.Split(",".ToCharArray()); 
   string[] Imps=ImpStr.Split(",".ToCharArray()) ;
   string[] tlbs=TitleStr.Split(",".ToCharArray ());
   //获得工作薄
       Microsoft.Office.Interop.Excel.Workbooks   wbs =ex.Workbooks; 
   Microsoft.Office.Interop.Excel.Workbook wb= wbs.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
   

   int z=0;//Sheet索引
   foreach (string tblname in tlbs) 
   {
    z+=1;
    //得到表和工作表一个工作表对应一个表,
    string[] tbn=tblname.Split("|".ToCharArray());
    System.Data.DataTable dt=ds.Tables[tbn[1].ToUpper() ];
    Microsoft.Office.Interop.Excel.Worksheet ws= 
     (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[z];
    //工作表的第一行标题设置为该表的表名.
    //从格式字符串中去表名对应的名称.
//    int tm1=TitleStr.ToUpper().IndexOf(dt.TableName+"|")+dt.TableName.Length +1;
//    string tit=TitleStr.Substring(tm1,TitleStr.IndexOf(",",tm1)-tm1);
    ws.Cells[TilteLocR, TitleLocC]=tbn[0] ;//设置该单元格显示的标题
    ws.Name=dt.TableName ;//设置该Sheet的名称为表名.
    int n1=locC;
    //设置字段名称
    foreach (string imp in Imps)
     {
     string[] im=imp.Split("|".ToCharArray());
      n1+=1 ;
      ws.Cells[locR,  n1]=im[0];//'字段名称
      Microsoft.Office.Interop.Excel.Range rg=
           (Microsoft.Office.Interop.Excel.Range)ws.Cells[locR, n1];
      rg.Interior.ColorIndex=ColTitleColorIndex;
      rg.Font.Bold=true;
     }
    for (int y=0;y<=dt.Rows.Count -1;y+=1)
    {
    System.Data.DataRow dr=dt.Rows[y];
     int n2=1;
     foreach (string imp in Imps)
     {
     string[] im=imp.Split("|".ToCharArray());
     ws.Cells[locR+1+y,locC+n2]=dr[im[1].ToUpper()];
     n2+=1;  
     }
    }
   }
  }


#7


楼上已经说得很详尽了。不过这个方法对Office的版本有一定的限制。有些Office版本不支持Microsoft.Office.Interop.Excel.ApplicationClass。
另一种方法是利用第三方控件了。比方说系统的SpreadSheet,
现在的公司是使用的Spread控件。
需要的话可以发给你,不过是试用版本,只能用1个月。
一般考虑第一种方案就好了。

#8


用.net自带的Excel有很多不便的地方

建议用第三方工具,属性直观好用

但是你也要看你们的要求,有的就不让用。

#9


第三方工具往往是要钱的
自己写吧
格式用配置文件
然后根据配置文件做一下HTML的TABLE串,将该串写成EXCEL格式的文件就行
这个我以前的程序是报表用的,不分页,除了数据那部分不能合并单元格外,标题/子标题/合计行都可以指定格式

#10


标题部分
-----------------
表格部分:(用于填写数据)命名区域
-----------------
脚注部分 页码

最简单的办法是使用ado连接excel
使用命名区域来填充

#11


up

#1


友情UP

#2


http://topic.csdn.net/t/20050310/12/3839773.html

#3


用csv格式存吧

#4


自己顶一下

#5


http://www.cnblogs.com/dahuzizyd/category/64340.html

#6



您也可以先制作好模版,用Microsoft.Office.Interop.Excel.ApplicationClass把xsl文件打开后,参考下列方式添数据就行了。
你还可以设置字体,格式等等各种各样的内容。 
http://blog.csdn.net/mysticboys/archive/2006/04/12/660860.aspx

 /// <summary>
  /// 把指定的DataSet中的内容导出到Excel中.
  /// </summary>
  /// <param name="ds">ds参数为DateSet对象</param>
  /// <param name="ImpStr">该字符串用来指定一些字段来导出,其使用格式为:aaa|AAA,bbb|BBB   小写字符串为在Excel表中显示该字段的列标题,大写表示字段名.不同字段使用逗号分隔.</param>
  /// <param name="locR">数据导出到Excel中的开始行</param>
  /// <param name="locC">数据导出到Excel中的开始列</param>
  /// <param name="TitleStr">该字符串用来指定要导出的表和表的标题其格式为:aaa|AAA,bbb|BBB   小写为该表中显示的标题,大写为表名称.不同表使用逗号分隔</param>
  /// <param name="TilteLocR">显示标题的行</param>
  /// <param name="TitleLocC">显示标题的列</param>
  /// <param name="ColTitleColorIndex">列标题颜色索引</param>
  /// <example>Import2Excel(this.dsData ,"用户名|USERNAME,登录名|LOGINNAME",3,1,"用户名列表|BILL_USER",1,2 ,12);</example>
  private void Import2Excel(System.Data.DataSet ds,string ImpStr ,int locR,int locC,string TitleStr,int TilteLocR, int TitleLocC,int ColTitleColorIndex )
  {
   //加载Excel
   Microsoft.Office.Interop.Excel.ApplicationClass ex=new Microsoft.Office.Interop.Excel.ApplicationClass();
   ex.Visible=true ;//显示Excel
   if (ex==null)
   {
    //无法显示时报错
   MessageBox.Show("无法启动 Microsoft Office Excel,导出失败!","Import2Excel", MessageBoxButtons.OK,MessageBoxIcon.Stop );
   return ;
   }
   string[] tles=TitleStr.Split(",".ToCharArray()); 
   string[] Imps=ImpStr.Split(",".ToCharArray()) ;
   string[] tlbs=TitleStr.Split(",".ToCharArray ());
   //获得工作薄
       Microsoft.Office.Interop.Excel.Workbooks   wbs =ex.Workbooks; 
   Microsoft.Office.Interop.Excel.Workbook wb= wbs.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
   

   int z=0;//Sheet索引
   foreach (string tblname in tlbs) 
   {
    z+=1;
    //得到表和工作表一个工作表对应一个表,
    string[] tbn=tblname.Split("|".ToCharArray());
    System.Data.DataTable dt=ds.Tables[tbn[1].ToUpper() ];
    Microsoft.Office.Interop.Excel.Worksheet ws= 
     (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[z];
    //工作表的第一行标题设置为该表的表名.
    //从格式字符串中去表名对应的名称.
//    int tm1=TitleStr.ToUpper().IndexOf(dt.TableName+"|")+dt.TableName.Length +1;
//    string tit=TitleStr.Substring(tm1,TitleStr.IndexOf(",",tm1)-tm1);
    ws.Cells[TilteLocR, TitleLocC]=tbn[0] ;//设置该单元格显示的标题
    ws.Name=dt.TableName ;//设置该Sheet的名称为表名.
    int n1=locC;
    //设置字段名称
    foreach (string imp in Imps)
     {
     string[] im=imp.Split("|".ToCharArray());
      n1+=1 ;
      ws.Cells[locR,  n1]=im[0];//'字段名称
      Microsoft.Office.Interop.Excel.Range rg=
           (Microsoft.Office.Interop.Excel.Range)ws.Cells[locR, n1];
      rg.Interior.ColorIndex=ColTitleColorIndex;
      rg.Font.Bold=true;
     }
    for (int y=0;y<=dt.Rows.Count -1;y+=1)
    {
    System.Data.DataRow dr=dt.Rows[y];
     int n2=1;
     foreach (string imp in Imps)
     {
     string[] im=imp.Split("|".ToCharArray());
     ws.Cells[locR+1+y,locC+n2]=dr[im[1].ToUpper()];
     n2+=1;  
     }
    }
   }
  }


#7


楼上已经说得很详尽了。不过这个方法对Office的版本有一定的限制。有些Office版本不支持Microsoft.Office.Interop.Excel.ApplicationClass。
另一种方法是利用第三方控件了。比方说系统的SpreadSheet,
现在的公司是使用的Spread控件。
需要的话可以发给你,不过是试用版本,只能用1个月。
一般考虑第一种方案就好了。

#8


用.net自带的Excel有很多不便的地方

建议用第三方工具,属性直观好用

但是你也要看你们的要求,有的就不让用。

#9


第三方工具往往是要钱的
自己写吧
格式用配置文件
然后根据配置文件做一下HTML的TABLE串,将该串写成EXCEL格式的文件就行
这个我以前的程序是报表用的,不分页,除了数据那部分不能合并单元格外,标题/子标题/合计行都可以指定格式

#10


标题部分
-----------------
表格部分:(用于填写数据)命名区域
-----------------
脚注部分 页码

最简单的办法是使用ado连接excel
使用命名区域来填充

#11


up