internal SLTable Clone() { SLTable t = new SLTable(); t.IsNewTable = this.IsNewTable; t.RelationshipID = this.RelationshipID; t.HasAutoFilter = this.HasAutoFilter; t.AutoFilter = this.AutoFilter.Clone(); t.HasSortState = this.HasSortState; t.SortState = this.SortState.Clone(); t.TableColumns = new List <SLTableColumn>(); for (int i = 0; i < this.TableColumns.Count; ++i) { t.TableColumns.Add(this.TableColumns[i].Clone()); } t.TableNames = new HashSet <string>(); foreach (string s in this.TableNames) { t.TableNames.Add(s); } t.HasTableStyleInfo = this.HasTableStyleInfo; t.TableStyleInfo = this.TableStyleInfo.Clone(); t.Id = this.Id; t.Name = this.Name; t.sDisplayName = this.sDisplayName; t.Comment = this.Comment; t.StartRowIndex = this.StartRowIndex; t.StartColumnIndex = this.StartColumnIndex; t.EndRowIndex = this.EndRowIndex; t.EndColumnIndex = this.EndColumnIndex; t.HasTableType = this.HasTableType; t.vTableType = this.vTableType; t.HeaderRowCount = this.HeaderRowCount; t.InsertRow = this.InsertRow; t.InsertRowShift = this.InsertRowShift; t.TotalsRowCount = this.TotalsRowCount; t.TotalsRowShown = this.TotalsRowShown; t.Published = this.Published; t.HeaderRowFormatId = this.HeaderRowFormatId; t.DataFormatId = this.DataFormatId; t.TotalsRowFormatId = this.TotalsRowFormatId; t.HeaderRowBorderFormatId = this.HeaderRowBorderFormatId; t.BorderFormatId = this.BorderFormatId; t.TotalsRowBorderFormatId = this.TotalsRowBorderFormatId; t.HeaderRowCellStyle = this.HeaderRowCellStyle; t.DataCellStyle = this.DataCellStyle; t.TotalsRowCellStyle = this.TotalsRowCellStyle; t.ConnectionId = this.ConnectionId; return(t); }
private void LoadSelectedWorksheet() { // Need to check? //if (string.IsNullOrEmpty(gsSelectedWorksheetRelationshipID)) return; WorksheetPart wsp = (WorksheetPart)wbp.GetPartById(gsSelectedWorksheetRelationshipID); slws = new SLWorksheet(SimpleTheme.listThemeColors, SimpleTheme.listIndexedColors, SimpleTheme.ThemeColumnWidth, SimpleTheme.ThemeColumnWidthInEMU, SimpleTheme.ThemeMaxDigitWidth, SimpleTheme.listColumnStepSize, SimpleTheme.ThemeRowHeight); int index = 0; SLColumnProperties cp; Column col; SLSheetView slsv; MergeCell mc; SLMergeCell slmc; SLConditionalFormatting condformat; SLHyperlink hl; OpenXmlReader oxrRow; int iRowIndex = -1; int iColumnIndex = -1; int iGuessRowIndex = 0; int iGuessColumnIndex = 0; SLRowProperties rp; Row r; Cell c; SLCell slc; OpenXmlReader oxr = OpenXmlReader.Create(wsp); while (oxr.Read()) { if (oxr.ElementType == typeof(SheetProperties)) { SheetProperties sprop = (SheetProperties)oxr.LoadCurrentElement(); slws.PageSettings.SheetProperties.FromSheetProperties(sprop); } else if (oxr.ElementType == typeof(SheetView)) { slsv = new SLSheetView(); slsv.FromSheetView((SheetView)oxr.LoadCurrentElement()); slws.SheetViews.Add(slsv); // we're concerned only with the first workbook view. if (slsv.ShowFormulas && slsv.WorkbookViewId == 0) slws.IsDoubleColumnWidth = true; } else if (oxr.ElementType == typeof(SheetFormatProperties)) { SheetFormatProperties sfp = (SheetFormatProperties)oxr.LoadCurrentElement(); slws.SheetFormatProperties.FromSheetFormatProperties(sfp); } else if (oxr.ElementType == typeof(Column)) { #region Column int i = 0; col = (Column)oxr.LoadCurrentElement(); int min = (int)col.Min.Value; int max = (int)col.Max.Value; for (i = min; i <= max; ++i) { cp = new SLColumnProperties(SimpleTheme.ThemeColumnWidth, SimpleTheme.ThemeColumnWidthInEMU, SimpleTheme.ThemeMaxDigitWidth, SimpleTheme.listColumnStepSize); if (col.Width != null) { cp.Width = col.Width.Value; cp.HasWidth = true; } if (col.Style != null) { index = (int)col.Style.Value; // default is 0 if (index > 0 && index < listStyle.Count) { cp.StyleIndex = (uint)index; } } if (col.Hidden != null && col.Hidden.Value) cp.Hidden = col.Hidden.Value; if (col.BestFit != null && col.BestFit.Value) cp.BestFit = col.BestFit.Value; if (col.Phonetic != null && col.Phonetic.Value) cp.Phonetic = col.Phonetic.Value; if (col.OutlineLevel != null && col.OutlineLevel.Value > 0) cp.OutlineLevel = col.OutlineLevel.Value; if (col.Collapsed != null && col.Collapsed.Value) cp.Collapsed = col.Collapsed.Value; slws.ColumnProperties[i] = cp; } #endregion } else if (oxr.ElementType == typeof(Row)) { #region Row ++iGuessRowIndex; iGuessColumnIndex = 0; r = (Row)oxr.LoadCurrentElement(); rp = new SLRowProperties(SimpleTheme.ThemeRowHeight); if (r.RowIndex != null) { iRowIndex = (int)r.RowIndex.Value; iGuessRowIndex = iRowIndex; } if (r.StyleIndex != null) { index = (int)r.StyleIndex.Value; // default is 0 if (index > 0 && index < listStyle.Count) { rp.StyleIndex = (uint)index; } } if (r.Height != null) { rp.HasHeight = true; rp.Height = r.Height.Value; } if (r.Hidden != null && r.Hidden.Value) rp.Hidden = r.Hidden.Value; if (r.OutlineLevel != null && r.OutlineLevel.Value > 0) rp.OutlineLevel = r.OutlineLevel.Value; if (r.Collapsed != null && r.Collapsed.Value) rp.Collapsed = r.Collapsed.Value; if (r.ThickTop != null && r.ThickTop.Value) rp.ThickTop = r.ThickTop.Value; if (r.ThickBot != null && r.ThickBot.Value) rp.ThickBottom = r.ThickBot.Value; if (r.ShowPhonetic != null && r.ShowPhonetic.Value) rp.ShowPhonetic = r.ShowPhonetic.Value; if (slws.RowProperties.ContainsKey(iGuessRowIndex)) { slws.RowProperties[iGuessRowIndex] = rp; } else { slws.RowProperties.Add(iGuessRowIndex, rp); } oxrRow = OpenXmlReader.Create(r); while (oxrRow.Read()) { if (oxrRow.ElementType == typeof(Cell)) { ++iGuessColumnIndex; c = (Cell)oxrRow.LoadCurrentElement(); slc = new SLCell(); slc.FromCell(c); if (c.CellReference != null) { if (SLTool.FormatCellReferenceToRowColumnIndex(c.CellReference.Value, out iRowIndex, out iColumnIndex)) { iGuessRowIndex = iRowIndex; iGuessColumnIndex = iColumnIndex; slws.Cells[new SLCellPoint(iGuessRowIndex, iGuessColumnIndex)] = slc; } else { slws.Cells[new SLCellPoint(iGuessRowIndex, iGuessColumnIndex)] = slc; } } else { slws.Cells[new SLCellPoint(iGuessRowIndex, iGuessColumnIndex)] = slc; } } } oxrRow.Close(); #endregion } else if (oxr.ElementType == typeof(SheetProtection)) { SLSheetProtection sp = new SLSheetProtection(); sp.FromSheetProtection((SheetProtection)oxr.LoadCurrentElement()); slws.HasSheetProtection = true; slws.SheetProtection = sp.Clone(); } else if (oxr.ElementType == typeof(AutoFilter)) { SLAutoFilter af = new SLAutoFilter(); af.FromAutoFilter((AutoFilter)oxr.LoadCurrentElement()); slws.HasAutoFilter = true; slws.AutoFilter = af.Clone(); } else if (oxr.ElementType == typeof(MergeCell)) { mc = (MergeCell)oxr.LoadCurrentElement(); slmc = new SLMergeCell(); slmc.FromMergeCell(mc); if (slmc.IsValid) slws.MergeCells.Add(slmc); } else if (oxr.ElementType == typeof(ConditionalFormatting)) { condformat = new SLConditionalFormatting(); condformat.FromConditionalFormatting((ConditionalFormatting)oxr.LoadCurrentElement()); slws.ConditionalFormattings.Add(condformat); } else if (oxr.ElementType == typeof(DataValidations)) { DataValidations dvs = (DataValidations)oxr.LoadCurrentElement(); if (dvs.DisablePrompts != null) slws.DataValidationDisablePrompts = dvs.DisablePrompts.Value; if (dvs.XWindow != null) slws.DataValidationXWindow = dvs.XWindow.Value; if (dvs.YWindow != null) slws.DataValidationYWindow = dvs.YWindow.Value; using (OpenXmlReader oxrDataValidation = OpenXmlReader.Create(dvs)) { SLDataValidation dv; while (oxrDataValidation.Read()) { if (oxrDataValidation.ElementType == typeof(DataValidation)) { dv = new SLDataValidation(); dv.FromDataValidation((DataValidation)oxrDataValidation.LoadCurrentElement()); slws.DataValidations.Add(dv); } } } } else if (oxr.ElementType == typeof(Hyperlink)) { hl = new SLHyperlink(); hl.FromHyperlink((Hyperlink)oxr.LoadCurrentElement()); slws.Hyperlinks.Add(hl); } else if (oxr.ElementType == typeof(PrintOptions)) { PrintOptions po = (PrintOptions)oxr.LoadCurrentElement(); if (po.HorizontalCentered != null) slws.PageSettings.PrintHorizontalCentered = po.HorizontalCentered.Value; if (po.VerticalCentered != null) slws.PageSettings.PrintVerticalCentered = po.VerticalCentered.Value; if (po.Headings != null) slws.PageSettings.PrintHeadings = po.Headings.Value; if (po.GridLines != null) slws.PageSettings.PrintGridLines = po.GridLines.Value; if (po.GridLinesSet != null) slws.PageSettings.PrintGridLinesSet = po.GridLinesSet.Value; } else if (oxr.ElementType == typeof(PageMargins)) { PageMargins pm = (PageMargins)oxr.LoadCurrentElement(); if (pm.Left != null) slws.PageSettings.LeftMargin = pm.Left.Value; if (pm.Right != null) slws.PageSettings.RightMargin = pm.Right.Value; if (pm.Top != null) slws.PageSettings.TopMargin = pm.Top.Value; if (pm.Bottom != null) slws.PageSettings.BottomMargin = pm.Bottom.Value; if (pm.Header != null) slws.PageSettings.HeaderMargin = pm.Header.Value; if (pm.Footer != null) slws.PageSettings.FooterMargin = pm.Footer.Value; } else if (oxr.ElementType == typeof(PageSetup)) { PageSetup ps = (PageSetup)oxr.LoadCurrentElement(); // consider setting to 1 if not one of the "valid" paper sizes? if (ps.PaperSize != null) slws.PageSettings.PaperSize = (SLPaperSizeValues)ps.PaperSize.Value; if (ps.Scale != null) slws.PageSettings.iScale = ps.Scale.Value; if (ps.FirstPageNumber != null) slws.PageSettings.FirstPageNumber = ps.FirstPageNumber.Value; if (ps.FitToWidth != null) slws.PageSettings.iFitToWidth = ps.FitToWidth.Value; if (ps.FitToHeight != null) slws.PageSettings.iFitToHeight = ps.FitToHeight.Value; if (ps.PageOrder != null) slws.PageSettings.PageOrder = ps.PageOrder.Value; if (ps.Orientation != null) slws.PageSettings.Orientation = ps.Orientation.Value; if (ps.UsePrinterDefaults != null) slws.PageSettings.UsePrinterDefaults = ps.UsePrinterDefaults.Value; if (ps.BlackAndWhite != null) slws.PageSettings.BlackAndWhite = ps.BlackAndWhite.Value; if (ps.Draft != null) slws.PageSettings.Draft = ps.Draft.Value; if (ps.CellComments != null) slws.PageSettings.CellComments = ps.CellComments.Value; if (ps.Errors != null) slws.PageSettings.Errors = ps.Errors.Value; if (ps.HorizontalDpi != null) slws.PageSettings.HorizontalDpi = ps.HorizontalDpi.Value; if (ps.VerticalDpi != null) slws.PageSettings.VerticalDpi = ps.VerticalDpi.Value; if (ps.Copies != null) slws.PageSettings.Copies = ps.Copies.Value; } else if (oxr.ElementType == typeof(HeaderFooter)) { HeaderFooter hf = (HeaderFooter)oxr.LoadCurrentElement(); if (hf.OddHeader != null) slws.PageSettings.OddHeaderText = hf.OddHeader.Text; if (hf.OddFooter != null) slws.PageSettings.OddFooterText = hf.OddFooter.Text; if (hf.EvenHeader != null) slws.PageSettings.EvenHeaderText = hf.EvenHeader.Text; if (hf.EvenFooter != null) slws.PageSettings.EvenFooterText = hf.EvenFooter.Text; if (hf.FirstHeader != null) slws.PageSettings.FirstHeaderText = hf.FirstHeader.Text; if (hf.FirstFooter != null) slws.PageSettings.FirstFooterText = hf.FirstFooter.Text; if (hf.DifferentOddEven != null) slws.PageSettings.DifferentOddEvenPages = hf.DifferentOddEven.Value; if (hf.DifferentFirst != null) slws.PageSettings.DifferentFirstPage = hf.DifferentFirst.Value; if (hf.ScaleWithDoc != null) slws.PageSettings.ScaleWithDocument = hf.ScaleWithDoc.Value; if (hf.AlignWithMargins != null) slws.PageSettings.AlignWithMargins = hf.AlignWithMargins.Value; } else if (oxr.ElementType == typeof(RowBreaks)) { SLBreak b; uint rowbkindex; using (OpenXmlReader oxrRowBreaks = OpenXmlReader.Create((RowBreaks)oxr.LoadCurrentElement())) { while (oxrRowBreaks.Read()) { if (oxrRowBreaks.ElementType == typeof(Break)) { b = new SLBreak(); b.FromBreak((Break)oxrRowBreaks.LoadCurrentElement()); rowbkindex = b.Id; slws.RowBreaks[(int)rowbkindex] = b; } } } } else if (oxr.ElementType == typeof(ColumnBreaks)) { SLBreak b; uint colbkindex; using (OpenXmlReader oxrColBreaks = OpenXmlReader.Create((ColumnBreaks)oxr.LoadCurrentElement())) { while (oxrColBreaks.Read()) { if (oxrColBreaks.ElementType == typeof(Break)) { b = new SLBreak(); b.FromBreak((Break)oxrColBreaks.LoadCurrentElement()); colbkindex = b.Id; slws.ColumnBreaks[(int)colbkindex] = b; } } } } else if (oxr.ElementType == typeof(DocumentFormat.OpenXml.Spreadsheet.Drawing)) { DocumentFormat.OpenXml.Spreadsheet.Drawing drawing = (DocumentFormat.OpenXml.Spreadsheet.Drawing)oxr.LoadCurrentElement(); slws.DrawingId = drawing.Id; if (wsp.DrawingsPart != null) { Xdr.NonVisualDrawingProperties nvdp; uint iUniqueId = 1; using (OpenXmlReader oxrDrawing = OpenXmlReader.Create(wsp.DrawingsPart.WorksheetDrawing)) { while (oxrDrawing.Read()) { if (oxrDrawing.ElementType == typeof(Xdr.NonVisualDrawingProperties)) { nvdp = (Xdr.NonVisualDrawingProperties)oxrDrawing.LoadCurrentElement(); if (nvdp.Id != null && nvdp.Id.Value > iUniqueId) { iUniqueId = nvdp.Id.Value; } } } } slws.NextWorksheetDrawingId = iUniqueId + 1; } } else if (oxr.ElementType == typeof(Picture)) { Picture pic = (Picture)oxr.LoadCurrentElement(); slws.BackgroundPictureId = pic.Id; slws.BackgroundPictureDataIsInFile = null; } else if (oxr.ElementType == typeof(WorksheetExtensionList)) { WorksheetExtensionList wsextlist = (WorksheetExtensionList)oxr.LoadCurrentElement(); SLConditionalFormatting2010 cf2010; X14.SparklineGroup sparkgrp; SLSparklineGroup spkgrp; using (OpenXmlReader oxrext = OpenXmlReader.Create(wsextlist)) { while (oxrext.Read()) { if (oxrext.ElementType == typeof(X14.ConditionalFormatting)) { cf2010 = new SLConditionalFormatting2010(); cf2010.FromConditionalFormatting((X14.ConditionalFormatting)oxrext.LoadCurrentElement()); slws.ConditionalFormattings2010.Add(cf2010.Clone()); } else if (oxrext.ElementType == typeof(X14.SparklineGroup)) { sparkgrp = (X14.SparklineGroup)oxrext.LoadCurrentElement(); spkgrp = new SLSparklineGroup(SimpleTheme.listThemeColors, SimpleTheme.listIndexedColors); spkgrp.FromSparklineGroup(sparkgrp); slws.SparklineGroups.Add(spkgrp.Clone()); } } } } } oxr.Dispose(); if (wsp.TableDefinitionParts != null) { SLTable t; foreach (TableDefinitionPart tdp in wsp.TableDefinitionParts) { t = new SLTable(); t.FromTable(tdp.Table); t.RelationshipID = wsp.GetIdOfPart(tdp); t.IsNewTable = false; slws.Tables.Add(t); } } }
internal SLTable Clone() { SLTable t = new SLTable(); t.IsNewTable = this.IsNewTable; t.RelationshipID = this.RelationshipID; t.HasAutoFilter = this.HasAutoFilter; t.AutoFilter = this.AutoFilter.Clone(); t.HasSortState = this.HasSortState; t.SortState = this.SortState.Clone(); t.TableColumns = new List<SLTableColumn>(); for (int i = 0; i < this.TableColumns.Count; ++i) { t.TableColumns.Add(this.TableColumns[i].Clone()); } t.TableNames = new HashSet<string>(); foreach (string s in this.TableNames) { t.TableNames.Add(s); } t.HasTableStyleInfo = this.HasTableStyleInfo; t.TableStyleInfo = this.TableStyleInfo.Clone(); t.Id = this.Id; t.Name = this.Name; t.sDisplayName = this.sDisplayName; t.Comment = this.Comment; t.StartRowIndex = this.StartRowIndex; t.StartColumnIndex = this.StartColumnIndex; t.EndRowIndex = this.EndRowIndex; t.EndColumnIndex = this.EndColumnIndex; t.HasTableType = this.HasTableType; t.vTableType = this.vTableType; t.HeaderRowCount = this.HeaderRowCount; t.InsertRow = this.InsertRow; t.InsertRowShift = this.InsertRowShift; t.TotalsRowCount = this.TotalsRowCount; t.TotalsRowShown = this.TotalsRowShown; t.Published = this.Published; t.HeaderRowFormatId = this.HeaderRowFormatId; t.DataFormatId = this.DataFormatId; t.TotalsRowFormatId = this.TotalsRowFormatId; t.HeaderRowBorderFormatId = this.HeaderRowBorderFormatId; t.BorderFormatId = this.BorderFormatId; t.TotalsRowBorderFormatId = this.TotalsRowBorderFormatId; t.HeaderRowCellStyle = this.HeaderRowCellStyle; t.DataCellStyle = this.DataCellStyle; t.TotalsRowCellStyle = this.TotalsRowCellStyle; t.ConnectionId = this.ConnectionId; return t; }
/// <summary> /// Insert a table into the currently selected worksheet. /// </summary> /// <param name="Table">An SLTable object with the properties already set.</param> /// <returns>True if the table is successfully inserted. False otherwise. If it failed, check if the given table overlaps any existing tables or merged cell range.</returns> public bool InsertTable(SLTable Table) { // This is the separating axis theorem. See merging cells for more details. // We're checking if the table collides with merged cells, the worksheet's autofilter range // and existing tables. // Technically, Excel unmerges cells when a table overlaps a merged cell range. // We're just going to fail that. bool result = true; int i, j; for (i = 0; i < slws.MergeCells.Count; ++i) { if (!(Table.EndRowIndex < slws.MergeCells[i].StartRowIndex || Table.StartRowIndex > slws.MergeCells[i].EndRowIndex || Table.EndColumnIndex < slws.MergeCells[i].StartColumnIndex || Table.StartColumnIndex > slws.MergeCells[i].EndColumnIndex)) { result = false; break; } } if (slws.HasAutoFilter) { if (!(Table.EndRowIndex < slws.AutoFilter.StartRowIndex || Table.StartRowIndex > slws.AutoFilter.EndRowIndex || Table.EndColumnIndex < slws.AutoFilter.StartColumnIndex || Table.StartColumnIndex > slws.AutoFilter.EndColumnIndex)) { result = false; } } if (!result) return false; for (i = 0; i < slws.Tables.Count; ++i) { if (!(Table.EndRowIndex < slws.Tables[i].StartRowIndex || Table.StartRowIndex > slws.Tables[i].EndRowIndex || Table.EndColumnIndex < slws.Tables[i].StartColumnIndex || Table.StartColumnIndex > slws.Tables[i].EndColumnIndex)) { result = false; break; } } if (result) { // sorting first! // We'll do just one level deep sorting. Multiple level sorting is hard... if (Table.HasSortState && Table.SortState.SortConditions.Count > 0) { bool bSortAscending = true; if (Table.SortState.SortConditions[0].Descending != null) bSortAscending = !Table.SortState.SortConditions[0].Descending.Value; this.Sort(Table.SortState.StartRowIndex, Table.SortState.StartColumnIndex, Table.SortState.EndRowIndex, Table.SortState.EndColumnIndex, true, Table.SortState.SortConditions[0].StartColumnIndex, bSortAscending); } // filtering next! Because rows might be hidden int iStartRowIndex = -1; int iEndRowIndex = -1; if (Table.HeaderRowCount > 0) iStartRowIndex = Table.StartRowIndex + 1; else iStartRowIndex = Table.StartRowIndex; // not inclusive of the last totals row iEndRowIndex = Table.EndRowIndex - 1; SLTableColumn tc; SLCellPoint pt; List<SLCell> cells; SLCell c; string sResultText = string.Empty; SLCalculationCell cc; uint iStyleIndex; for (j = 0; j < Table.TableColumns.Count; ++j) { tc = Table.TableColumns[j]; if (tc.TotalsRowLabel != null && tc.TotalsRowLabel.Length > 0) { c = new SLCell(); c.DataType = CellValues.SharedString; c.NumericValue = this.DirectSaveToSharedStringTable(SLTool.XmlWrite(tc.TotalsRowLabel)); slws.Cells[new SLCellPoint(Table.EndRowIndex, Table.StartColumnIndex + j)] = c; } if (tc.HasTotalsRowFunction) { cells = new List<SLCell>(); for (i = iStartRowIndex; i <= iEndRowIndex; ++i) { pt = new SLCellPoint(i, Table.StartColumnIndex + j); if (slws.Cells.ContainsKey(pt)) { cells.Add(slws.Cells[pt].Clone()); } } c = new SLCell(); c.CellFormula = new SLCellFormula(); c.CellFormula.FormulaText = string.Format("SUBTOTAL({0},[{1}])", this.GetFunctionNumber(tc.TotalsRowFunction), tc.Name); if (!this.Calculate(tc.TotalsRowFunction, cells, out sResultText)) { c.DataType = CellValues.Error; } c.CellText = sResultText; pt = new SLCellPoint(Table.EndRowIndex, Table.StartColumnIndex + j); iStyleIndex = 0; if (slws.RowProperties.ContainsKey(pt.RowIndex)) iStyleIndex = slws.RowProperties[pt.RowIndex].StyleIndex; if (iStyleIndex == 0 && slws.ColumnProperties.ContainsKey(pt.ColumnIndex)) iStyleIndex = slws.ColumnProperties[pt.ColumnIndex].StyleIndex; if (iStyleIndex != 0) c.StyleIndex = (uint)iStyleIndex; slws.Cells[pt] = c; cc = new SLCalculationCell(SLTool.ToCellReference(Table.EndRowIndex, Table.StartColumnIndex + j)); cc.SheetId = (int)giSelectedWorksheetID; slwb.AddCalculationCell(cc); } } if (slwb.HasTableName(Table.DisplayName) || Table.DisplayName.Contains(" ")) { slwb.RefreshPossibleTableId(); Table.Id = slwb.PossibleTableId; Table.sDisplayName = string.Format("Table{0}", Table.Id.ToString(CultureInfo.InvariantCulture)); Table.Name = Table.sDisplayName; } if (!slwb.TableIds.Contains(Table.Id)) slwb.TableIds.Add(Table.Id); if (!slwb.TableNames.Contains(Table.DisplayName)) slwb.TableNames.Add(Table.DisplayName); slws.Tables.Add(Table.Clone()); } return result; }
/// <summary> /// Creates an instance of SLTable, given row and column indices of opposite cells in a cell range. /// </summary> /// <param name="StartRowIndex">The row index of the start row. This is typically the top row.</param> /// <param name="StartColumnIndex">The column index of the start column. This is typically the left-most column.</param> /// <param name="EndRowIndex">The row index of the end row. This is typically the bottom row.</param> /// <param name="EndColumnIndex">The column index of the end column. This is typically the right-most column.</param> /// <returns>An SLTable with the required information.</returns> public SLTable CreateTable(int StartRowIndex, int StartColumnIndex, int EndRowIndex, int EndColumnIndex) { int iStartRowIndex = 1, iEndRowIndex = 1, iStartColumnIndex = 1, iEndColumnIndex = 1; if (StartRowIndex < EndRowIndex) { iStartRowIndex = StartRowIndex; iEndRowIndex = EndRowIndex; } else { iStartRowIndex = EndRowIndex; iEndRowIndex = StartRowIndex; } if (StartColumnIndex < EndColumnIndex) { iStartColumnIndex = StartColumnIndex; iEndColumnIndex = EndColumnIndex; } else { iStartColumnIndex = EndColumnIndex; iEndColumnIndex = StartColumnIndex; } if (iStartRowIndex < 1) iStartRowIndex = 1; if (iStartRowIndex == SLConstants.RowLimit) iStartRowIndex = SLConstants.RowLimit - 1; if (iStartColumnIndex < 1) iStartColumnIndex = 1; // consider minus 1 in case there's a totals row so there's less checking... if (iEndRowIndex > SLConstants.RowLimit) iEndRowIndex = SLConstants.RowLimit; if (iEndColumnIndex > SLConstants.ColumnLimit) iEndColumnIndex = SLConstants.ColumnLimit; if (iEndRowIndex <= iStartRowIndex) iEndRowIndex = iStartRowIndex + 1; SLTable tbl = new SLTable(); tbl.SetAllNull(); slwb.RefreshPossibleTableId(); tbl.Id = slwb.PossibleTableId; tbl.DisplayName = string.Format("Table{0}", tbl.Id); tbl.Name = tbl.DisplayName; tbl.StartRowIndex = iStartRowIndex; tbl.StartColumnIndex = iStartColumnIndex; tbl.EndRowIndex = iEndRowIndex; tbl.EndColumnIndex = iEndColumnIndex; tbl.AutoFilter.StartRowIndex = tbl.StartRowIndex; tbl.AutoFilter.StartColumnIndex = tbl.StartColumnIndex; tbl.AutoFilter.EndRowIndex = tbl.EndRowIndex; tbl.AutoFilter.EndColumnIndex = tbl.EndColumnIndex; tbl.HasAutoFilter = true; SLTableColumn tc; uint iColumnId = 1; int i, index; uint j; SLCell c; SLCellPoint pt; string sHeaderText = string.Empty; SharedStringItem ssi; SLRstType rst = new SLRstType(SLConstants.OfficeThemeMajorLatinFont, SLConstants.OfficeThemeMinorLatinFont, new List<System.Drawing.Color>(), new List<System.Drawing.Color>()); for (i = tbl.StartColumnIndex; i <= tbl.EndColumnIndex; ++i) { pt = new SLCellPoint(StartRowIndex, i); sHeaderText = string.Empty; if (slws.Cells.ContainsKey(pt)) { c = slws.Cells[pt]; if (c.CellText == null) { if (c.DataType == CellValues.Number) sHeaderText = c.NumericValue.ToString(CultureInfo.InvariantCulture); else if (c.DataType == CellValues.Boolean) sHeaderText = c.NumericValue > 0.5 ? "TRUE" : "FALSE"; else sHeaderText = string.Empty; } else { sHeaderText = c.CellText; } if (c.DataType == CellValues.SharedString) { index = -1; if (c.CellText != null) { if (int.TryParse(c.CellText, out index)) { index = -1; } } else { index = Convert.ToInt32(c.NumericValue); } if (index >= 0 && index < listSharedString.Count) { ssi = new SharedStringItem(); ssi.InnerXml = listSharedString[index]; rst.FromSharedStringItem(ssi); sHeaderText = rst.ToPlainString(); } } } j = iColumnId; if (sHeaderText.Length == 0) { sHeaderText = string.Format("Column{0}", j); } while (tbl.TableNames.Contains(sHeaderText)) { ++j; sHeaderText = string.Format("Column{0}", j); } tc = new SLTableColumn(); tc.Id = iColumnId; tc.Name = sHeaderText; tbl.TableColumns.Add(tc); tbl.TableNames.Add(sHeaderText); ++iColumnId; } tbl.TableStyleInfo.ShowFirstColumn = false; tbl.TableStyleInfo.ShowLastColumn = false; tbl.TableStyleInfo.ShowRowStripes = true; tbl.TableStyleInfo.ShowColumnStripes = false; tbl.HasTableStyleInfo = true; return tbl; }