You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.7 KiB
C#

namespace com.azkoss.excellite
{
using System;
using System.Collections;
using System.Drawing;
internal class MergedCellRanges
{
// Methods
internal MergedCellRanges(ExcelWorksheet parent)
{
this.items = new Hashtable();
this.parent = parent;
}
internal MergedCellRanges(ExcelWorksheet parent, MergedCellRanges sourceRanges)
{
this.items = new Hashtable();
this.parent = parent;
foreach (MergedCellRange range1 in sourceRanges.Values)
{
this.Add(new MergedCellRange(this.parent, range1));
}
}
internal void Add(MergedCellRange mergedRange)
{
if (mergedRange.IsAnyCellMerged)
{
throw new ArgumentException("New merged range can't overlap with existing merged range.");
}
this.AddInternal(mergedRange);
CellStyle style1 = new CellStyle();
MergedCellRanges.ResolveBorder(style1, mergedRange, IndividualBorder.Top, 0, 0, 0, 1);
MergedCellRanges.ResolveBorder(style1, mergedRange, IndividualBorder.Left, 0, 0, 1, 0);
MergedCellRanges.ResolveBorder(style1, mergedRange, IndividualBorder.Bottom, mergedRange.Height - 1, 0, 0, 1);
MergedCellRanges.ResolveBorder(style1, mergedRange, IndividualBorder.Right, 0, mergedRange.Width - 1, 1, 0);
bool flag1 = false;
CellStyle style2 = null;
foreach (ExcelCell cell1 in mergedRange)
{
if (!flag1)
{
if (!cell1.IsStyleDefault)
{
style2 = cell1.Style;
}
flag1 = true;
}
cell1.AddToMergedRange(mergedRange);
}
if ((mergedRange.Value == null) && (style2 != null))
{
mergedRange.Style = style2;
}
mergedRange.Style.Borders = style1.Borders;
}
internal void AddInternal(MergedCellRange mergedRange)
{
this.items.Add(mergedRange, mergedRange);
}
internal void Remove(MergedCellRange mergedRange)
{
this.items.Remove(mergedRange);
foreach (ExcelCell cell1 in mergedRange)
{
cell1.RemoveFromMergedRange();
}
}
private static void ResolveBorder(CellStyle bordersStyle, MergedCellRange mergedRange, IndividualBorder borderId, int row, int column, int rowInc, int colInc)
{
CellBorder border1 = bordersStyle.Borders[borderId];
bool flag1 = true;
while ((row < mergedRange.Height) && (column < mergedRange.Width))
{
CellBorder border2 = mergedRange[row, column].Style.Borders[borderId];
if (flag1)
{
border1.LineStyle = border2.LineStyle;
border1.LineColor = border2.LineColor;
flag1 = false;
}
else if ((border2.LineStyle != border1.LineStyle) || (border2.LineColor != border1.LineColor))
{
border1.LineStyle = LineStyle.None;
border1.LineColor = Color.Empty;
return;
}
row += rowInc;
column += colInc;
}
}
// Properties
public ICollection Values
{
get
{
return this.items.Values;
}
}
// Fields
private Hashtable items;
private ExcelWorksheet parent;
}
}