我在做一个网络版考勤系统,其中包含用户表和考勤记录表(用户表:用户ID,用户姓名等;考勤记录表:ID,用户ID,考勤日期,上班时间,下班时间,上班考勤状态、下班考勤状态,其中上下班考勤状态是一个布尔型,为0没考勤,为1已考勤。)。现在我想实现报表打印功能,在报表中,按照以下格式显示数据在excel中,不知道怎么实现,很着急。                                               考勤统计表        日期                                                         统计栏 
    姓名          1 2 3 4 5.。。30 31       事假  病假 旷工   
序号
1    用户1
2    用户2
3    。
4    。
。    。
。    。
。    。   出勤:打钩   病假:三角形 旷工:叉

解决方案 »

  1.   

    好像你打出来的格式很乱啊,看不太懂是什么意思。
    不过总的来说这个表没有什么难度诶
    比如 序号   姓名     出勤        病假      旷工
          1     王二     打钩       三角形      叉拿以上举例: 我是用报表工具来做的,我的是FineReport,实现起来如下把序号和姓名直接拖入格子,FR里会默认显示序号对应姓名这样,出勤那里,比如出勤是布尔型,就写 if(出勤==0,“叉”,“勾”) 
    病假和旷工也是一样的道理 如果要统计的话也很简单,比如统计序号1的人请过几次事假,直接双击事假所在格子,将类型设为统计——个数。基本就这样,要是想换其他格式,原理一样。
      

  2.   

    你在select 的存储过程中 写 case 矿工 when 0 then '是' else '否'
      

  3.   

    /// <summary>
    /// 创建具有指定文件名和指定列表名称、类型的Excel文件。
    /// </summary>
    /// <param name="excelFileName">新创建的Excel文件路径名称</param>
    /// <param name="excelFields">将创建的Excel文件的字段名称和类型,名称和类型用空格隔开,字段名间用逗号隔开。</param>
    /// <param name="sheetName">将创建的Excel文件的sheet名。</param>
    public static void CreateExcelFile(string excelFileName,string excelFields,string excelSheetName)
    {
    //注意:写入数据时的连接字符串与读取的时候不同,否则会出现错误“操作必须使用一个可更新的查询。”
    string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFileName  +";Extended Properties=Excel 8.0;";
    OleDbConnection objConn = new OleDbConnection(connString);
    OleDbCommand objCmd = new OleDbCommand();
    objCmd.Connection = objConn; objCmd.Connection.Open(); //建立表结构
    objCmd.CommandText = "CREATE TABLE " + excelSheetName + " ( "+excelFields+" )";
    objCmd.ExecuteNonQuery(); objCmd.Connection.Close();
    } /// <summary>
            ///  将DataSet文件中指定的字段的数据转换成Excel文件中Sheet中的数据 。
            /// 注意:excel字段名,例如"用户名,用户手机","用户表"。
    /// </summary>
    /// <param name="dataSet">指定的DataSet数据集</param>
    /// <param name="datasetFields">DataSet数据集中的列集合字符串</param>
    /// <param name="excelFileName">导入Excel文件的路径和文件名</param>
    /// <param name="excelFields">Excel中的字段集合字符串</param>
    /// <param name="excelSheetName">Excel程序的Sheet名</param>
    public static void DataSetToExcel(DataSet dataSet,string datasetFields,string excelFileName,string excelFields,string excelSheetName)
    {
    //注意:写入数据时的连接字符串与读取的时候不同,否则会出现错误“操作必须使用一个可更新的查询。”
    string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFileName  +";Extended Properties=Excel 8.0;";
    OleDbConnection objConn = new OleDbConnection(connString);
    OleDbCommand objCmd = new OleDbCommand();
    objCmd.Connection = objConn; //建立插入动作的Command字符串
    string insertSheetName = excelSheetName.Trim();
    string insertFields = "[" + excelFields.Trim().Replace(",","],[") + "]";
    string insertParams = "@" + datasetFields.Trim().Replace(",",",@");
    objCmd.CommandText = string.Format("INSERT INTO {0} ({1}) VALUES ({2}) ",insertSheetName,insertFields,insertParams); objCmd.Connection.Open(); string[] fields = datasetFields.Split(',');
    string[] parms = insertParams.Split(','); //遍历DataSet将数据插入新建的Excel文件中
    int nRowFlag = 0;
    foreach (DataRow dr in dataSet.Tables[0].Rows)
    {   
    for(int i =0 ; i < fields.Length & i < parms.Length; i++)
    {
    if(nRowFlag == 0)
    {
    objCmd.Parameters.Add(parms[i],dr[fields[i]]);
    }
    else
    {
    objCmd.Parameters[parms[i]].Value = dr[fields[i]] ;
    }
    }
    objCmd.ExecuteNonQuery(); nRowFlag ++;
    } objCmd.Connection.Close();
    }完整的报表打印可以在我的上面下载
      

  4.   

    补充一下:我是想最后查询的信息按照上面的格式显示到excel中,具体怎么做啊?
      

  5.   


    最后直接“导出成Excel”就OK了