在ASP.NET中应用Excel:(7)表格尺寸的计算

来源:互联网 发布:女生用的血滴子淘宝 编辑:程序博客网 时间:2024/05/19 00:17

上一节留了个尾巴,没有说如何获取表格的尺寸。其实表格尺寸的计算在读取Excel工作表数据时就应该进行,同时进行的还有计算包含数据的单元格的最大列号和行号。

具体实现是:

for (int r = rowRange.Count; r >= 1; r--){    XmlElement row_elem = xml.CreateElement("ROW");    double rowHeight = 18.5f;    for (int c = 1; c < colRange.Count; c++)    {        if (data[r, c] != null)        {            ....            // 获取行列号            cell_elem.SetAttribute("row", r.ToString());            cell_elem.SetAttribute("col", c.ToString());            // 计算合并和普通单元格的尺寸            if ((bool)cell.MergeCells)            {                Excel.Range ma = (Excel.Range)cell.MergeArea;                Excel.Range macol = ma.Columns;                Excel.Range marow = ma.Rows;                // 获取合并属性                ...                // 获取合并区域的尺寸                cell_elem.SetAttribute("width", ma.Width.ToString() + "pt");                cell_elem.SetAttribute("height", ma.Height.ToString() + "pt");                // 更新本行的最大高度                if ((double)ma.Height > rowHeight) rowHeight = (double)ma.Height;                                // 释放                ...            }            else            {                // 非合并单元格                cell_elem.SetAttribute("colspan", "1");                cell_elem.SetAttribute("rowspan", "1");                cell_elem.SetAttribute("width", cell.Width.ToString() + "pt");                cell_elem.SetAttribute("height", cell.Height.ToString() + "pt");                if ((double)cell.Height > rowHeight) rowHeight = (double)cell.Height;            }            row_elem.AppendChild(cell_elem);            if (r > maxRow) maxRow = r; // 更新最大行号            if (c > maxCol) maxCol = c; // 更新最大列号            // 释放            ....        } // if has data    } // for c    if (row_elem.ChildNodes.Count > 0 || sheet_elem.ChildNodes.Count > 0)    {        row_elem.SetAttribute("height", rowHeight.ToString() + "pt"); // 这里设置行高        sheet_elem.InsertBefore(row_elem, sheet_elem.FirstChild);    }} // for rsheet_elem.SetAttribute("row", maxRow.ToString()); // 保存最大行列号,也就是工作表实际有数据的区域sheet_elem.SetAttribute("col", maxCol.ToString());{   // 这段代码描述如何获取工作表指定范围的尺寸    Excel.Range borderCell = (Excel.Range)range.get_Item(maxRow, maxCol); // 获取最右下的单元格     // 获取其尺寸作为工作表的尺寸,注意:未考虑如果该单元格是否合并的问题,留待同学的课后作业    sheet_elem.SetAttribute("width", ((double)borderCell.Left + (double)borderCell.Width).ToString());    sheet_elem.SetAttribute("height", ((double)borderCell.Top + (double)borderCell.Height).ToString());        releaseComObject(borderCell); // 收尾工作    borderCell = null;}

有了工作表的尺寸,就可以设置TabPanel的尺寸了:

panel.ID = "Panel" + m;// 这里设置TabPanel的尺寸panel.Attributes.Add("Width", sheet_node_list[m].Attributes["width"].Value);panel.Attributes.Add("Height", sheet_node_list[m].Attributes["height"].Value);
// 这里获取工作表的最大行列号int _rowNum = Math.Max(1, int.Parse(sheetNodes[m].Attributes["row"].Value) + 1);int _colNum = Math.Max(1, int.Parse(sheetNodes[m].Attributes["col"].Value) + 1);

在向表格填充单元格和数据的时候,设置表格的尺寸:

protected void fillTableData(Table tbl, int _rowNum, int _colNum, XmlNode  sheet_node){    tbl.Attributes.Add("cellpadding", "0");    tbl.Attributes.Add("cellspacing", "0");    tbl.Style.Add("border-collapse", "collapse");    tbl.Style.Add("table-layout", "fixed");    // 还记得这一行吗?设置表格的宽度    tbl.Style.Add("width", sheet_node.Attributes["width"].Value + "pt");    tbl.Style.Add("border", "1px solid black");    ....

还需要设置TabContainer的属性:在属性面板中,清空Width和Height,设置ScrollBars为"Auto"。这样就可以看到比较完美的界面了,如果不对,请仔细检察代码,并尝试其它不同的属性值。  

原创粉丝点击