当前位置:编程学习 > C#/ASP.NET >>

請教水晶報表多列頭的問題

--------------------编程问答-------------------- 有人有類似的問題的嗎? --------------------编程问答-------------------- 合并第1、2行??
还是合并第4、5行?
--------------------编程问答--------------------
引用 2 楼 babyt 的回复:
合并第1、2行??
还是合并第4、5行?


合併第3.4.5 --------------------编程问答-------------------- 这个不是已经合并了吗?第一列的单元格已经是合并的了吧?
你后面明显是两个行,是合并不掉的
倒是第4、5还有合并的可能。倒也不是合并,而是这两行可能可以处理成一行。 --------------------编程问答--------------------
引用 4 楼 babyt 的回复:
这个不是已经合并了吗?第一列的单元格已经是合并的了吧?
你后面明显是两个行,是合并不掉的
倒是第4、5还有合并的可能。倒也不是合并,而是这两行可能可以处理成一行。

阿 泰的意思是 前面的一行(3) 跟後面的二行(3.4) 是無法合併成一行的 對吧?

有第五行的原因是 主檔跟明細記錄之間莫名其妙的產生了一行(在另外一個帖子上看到的),第五行不知道有米有上面方式可以消除掉 --------------------编程问答-------------------- 在別處找的一篇直接導出execl的方法。沒有使用excel,這樣的話可能要自己去畫execl模板
不過這樣的課操作性就好多了

using System.Data;

using Excel;

using System.IO;

namespace Test.ExcelCom

{

    /**//// <summary>

    /// 将DataView中的数据导入Excel文件中

    /// 作者:Rexsp

    /// 创建:2004-4-4

    /// </summary>

    public class OutputExcel

    {

        私有成员#region 私有成员

        /**//// <summary>

        /// 数据的DataView

        /// </summary>

        private DataView dv=null;

        /**//// <summary>

        /// 表格标题

        /// </summary>

        private string title=null;

        /**//// <summary>

        /// 输出文件路径

        /// </summary>

        private string outFilePath=null;

        /**//// <summary>

        /// 输入文件名

        /// </summary>

        private string inputFilePath=null;

        #endregion



        公共属性#region 公共属性

        /**//// <summary>

        /// 数据的DataView

        /// </summary>

        public DataView DV

        {

            set{dv=value;}

        }

        /**//// <summary>

        /// 表格标题

        /// </summary>

        public string Title

        {

            set{title=value;}

            get{return title;}

        }

        /**//// <summary>

        /// 输出文件路径

        /// </summary>

        public string OutFilePath

        {

            set{outFilePath=value;}

            get{return outFilePath;}

        }

        /**//// <summary>

        /// 输入文件路径

        /// </summary>

        public string InputFilePath

        {

            set{inputFilePath=value;}

            get{return inputFilePath;}

        }

        #endregion

        

        构造函数#region 构造函数

        public OutputExcel()

        {

        }

        public OutputExcel(DataView dv,string title)

        {

            //

            // TODO: 在此处添加构造函数逻辑

            //

        }

        #endregion



        公共方法#region 公共方法

        public void CreateExcel()

        {

            int rowIndex=4;//行起始坐标

            int colIndex=1;//列起始坐标



            ApplicationClass myApp=null;

            Workbook myBook=null;

            Worksheet mySheet=null;



            //如果文件不存在,则将模板文件拷贝一份作为输出文件

            //这里如果通过File.Create来创建文件是不行的,因为xls

            //的空文件也有固定的格式,跟文本不一样的,也许有其它

            //通过程序直接生成excel的方法,大家可以尝试尝试的

            if(!File.Exists(outFilePath))

            {

                File.Copy(inputFilePath,outFilePath,true);

            }



            myApp= new ApplicationClass();

            myApp.Visible=false;

            object oMissiong=System.Reflection.Missing.Value;

            myApp.Workbooks.Open(outFilePath,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong);

            myBook=myApp.Workbooks[1];

            mySheet=(Worksheet)myBook.ActiveSheet;





            //

            //取得标题

            //

            foreach(DataColumn col in dv.Table.Columns)

            {

                colIndex++;

                mySheet.Cells[4,colIndex] = col.ColumnName;

                mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐

            }



            //

            //取得表格中的数据

            //

            foreach(DataRowView row in dv)

            {

                rowIndex ++;

                colIndex = 1;

                foreach(DataColumn col in dv.Table.Columns)

                {

                    colIndex ++;

                    if(col.DataType == System.Type.GetType("System.DateTime"))

                    {

                        mySheet.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");

                        mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐

                    }

                    else

                        if(col.DataType == System.Type.GetType("System.String"))

                    {

                        mySheet.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();

                        mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐

                    }

                    else

                    {

                        mySheet.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();

                    }

                }

            }

            //

            //加载一个合计行

            //

            int rowSum = rowIndex + 1;

            int colSum = 2;

            mySheet.Cells[rowSum,2] = "合计";

            mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;

            //

            //设置选中的部分的颜色

            //

            mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Select();

            mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种

            //

            //取得整个报表的标题

            //

            mySheet.Cells[2,2] = title;

            //

            //设置整个报表的标题格式

            //

            mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Bold = true;

            mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Size = 22;

            //

            //设置报表表格为最适应宽度

            //

            mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Select();

            mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Columns.AutoFit();

            //

            //设置整个报表的标题为跨列居中

            //

            mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).Select();

            mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;

            //

            //绘制边框

            //

            mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Borders.LineStyle = 1;

            mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗

            mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗

            mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗

            mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗

            myBook.Save();;

            myBook.Close( true,outFilePath,true);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);

            GC.Collect();





        }

        #endregion

    }





}



--------------------编程问答-------------------- 用代码当然是最灵活的,呵呵。这个没话说。
补充:.NET技术 ,  图表区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,