Esempio n. 1
0
        private static WorkbookInfo ParseWorkbook(string fileName)
        {
            var xmlParser = new XmlParser(fileName);

            var worksheetInfos = new List <WorksheetInfo>();
            var definedNames   = new List <DefinedName>();

            foreach (var sheetNode in xmlParser.GetNodes("sheet"))
            {
                var sheetNodeAttributes = xmlParser.GetAttributes(sheetNode);
                var worksheetInfo       = new WorksheetInfo(sheetNodeAttributes);

                worksheetInfos.Add(worksheetInfo);
            }

            foreach (var definedNameNode in xmlParser.GetNodes("definedName"))
            {
                var definedNameNodeAttributes = xmlParser.GetAttributes(definedNameNode);

                var name        = definedNameNodeAttributes["name"];
                var hidden      = definedNameNodeAttributes.TryGetValue("hidden", out var hidden2) && hidden2 == "1";
                var definedName = new DefinedName(name, definedNameNode.InnerText, hidden);

                definedNames.Add(definedName);
            }

            return(new WorkbookInfo(worksheetInfos.ToArray(), definedNames.ToArray()));
        }
Esempio n. 2
0
        /// <summary>
        /// http://stackoverflow.com/questions/8405025/set-print-area-openxml-with-excel
        /// https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.definedname(v=office.14).aspx
        /// </summary>
        /// <param name="spreadsheetDoc"></param>
        /// <param name="sheetName"></param>
        /// <param name="columnStart">Ex: "$A"</param>
        /// <param name="columnEnd">EX: "$B"</param>
        /// null if just not set print areas column or row
        public static void SetPrintArea(WorkbookPart workbookPart, string sheetName, string columnStart, string columnEnd, string rowStart, string rowEnd)
        {
            String definedName  = sheetName;
            var    definedNames = workbookPart.Workbook.Descendants <DefinedNames>().FirstOrDefault();

            DefinedName name = null;
            UInt32Value locSheetId;

            if (definedNames == null)
            {
                definedNames = new DefinedNames();
                workbookPart.Workbook.Append(definedNames);
                workbookPart.Workbook.Save();
                locSheetId = UInt32Value.FromUInt32(0);
            }
            else
            {
                int defineNameCount = definedNames.Descendants <DefinedName>().Count();
                locSheetId = UInt32Value.FromUInt32((UInt32)defineNameCount);
            }
            //_xlnm.Print_Area la tham so de set up cho khoang khong in
            if (rowStart != null && rowEnd != null && columnEnd != null && columnStart != null)
            {
                name = new DefinedName()
                {
                    Name         = "_xlnm.Print_Area",
                    LocalSheetId = locSheetId
                    ,
                    Text = String.Format("{0}!${1}${2}:${3}${4}", sheetName, columnStart.Replace("$", ""), rowStart.Replace("$", ""), columnEnd.Replace("$", ""), rowEnd.Replace("$", ""))
                };
            }
            definedNames.Append(name);
            workbookPart.Workbook.Save();
        }
        /// <summary>
        /// The defined name range comprises sheet and excel reference. This method decomposes this into contituents relevent for rows.
        /// Maybe requires extension to columns in the future.
        /// </summary>
        /// <param name="workbook">The workbook.</param>
        /// <param name="dn">The dn.</param>
        /// <param name="SheetName">Name of the sheet.</param>
        /// <param name="RowStart">The row start.</param>
        /// <param name="RowEnd">The row end.</param>
        /// <returns></returns>
        public static bool BreakDownDefinedName(this Workbook workbook, DefinedName dn, ref string SheetName, ref uint RowStart, ref uint RowEnd)
        {
            string[] DefinedNameRefElements = dn.Text.Split('!');

            SheetName = DefinedNameRefElements[0];

            if (SheetName.StartsWith("'") & SheetName.EndsWith("'"))
            {
                SheetName = SheetName.Substring(1, SheetName.Length - 2);
            }

            if (DefinedNameRefElements.Length > 0)
            {
                string[] DefinedNameCellElements = DefinedNameRefElements[1].Split(':');

                bool ok = true;

                if (DefinedNameCellElements.Length > 0)
                {
                    ok = TryGetRowIndex(DefinedNameCellElements[0], out RowStart);

                    if (ok && DefinedNameCellElements.Length > 1)
                    {
                        ok = TryGetRowIndex(DefinedNameCellElements[1], out RowEnd);
                        return(ok);
                    }
                }
            }
            return(false);
        }
Esempio n. 4
0
        private static object GetDataValueByBookmark(DefinedName bookmark, SOARolePropertyRow row)
        {
            object result = null;

            SOARolePropertyValue propertyValue = row.Values.FindByColumnName(bookmark.Name);

            if (propertyValue != null)
            {
                if (propertyValue.Column.DataType != ColumnDataType.String)
                {
                    result = DataConverter.ChangeType(typeof(string), propertyValue.Value, propertyValue.Column.RealDataType);
                }
                else
                {
                    result = propertyValue.Value;
                }
            }
            else
            {
                switch (bookmark.Name.ToLower())
                {
                case "operatortype":
                    result = row.OperatorType.ToString();
                    break;

                case "operator":
                    result = row.Operator;
                    break;
                }
            }

            return(result);
        }
Esempio n. 5
0
        public void SetDefinedNameRange(string name, CellRangeRef value)
        {
            DefinedName definedName = (
                from item in document.WorkbookPart.Workbook.DefinedNames.Elements <DefinedName>()
                where item.Name == name
                select item).Single();

            definedName.Text = value.ToString();
        }
Esempio n. 6
0
 protected override Boolean LocateRange(IWorkbook book)
 {
     if (book.DefinedNames.Contains(this.Name))
     {
         this.dname = book.DefinedNames.GetDefinedName(Name);
         return(true);
     }
     return(false);
 }
Esempio n. 7
0
        public CellRangePosition GetDefinedName(string name)
        {
            DefinedName definedName = (
                from item in document.WorkbookPart.Workbook.DefinedNames.Elements <DefinedName>()
                //from item in documentTemplate.WorkbookPart.Workbook.DefinedNames.Elements<DefinedName>()
                where item.Name == name
                select item).Single();

            return(new CellRangePosition(definedName.Text));
        }
Esempio n. 8
0
        /// <summary>
        /// Get real reference of defined name
        /// </summary>
        /// <param name="doc">Spread sheet document</param>
        /// <param name="name">Defined name</param>
        /// <returns>Real reference</returns>
        public static String GetDefinedName(this SpreadsheetDocument doc, String name)
        {
            DefinedName dn = doc.WorkbookPart.Workbook.Descendants <DefinedName>().FirstOrDefault(a => a.Name == name);

            if (dn == null)
            {
                return(null);
            }
            return(dn.InnerText);
        }
Esempio n. 9
0
        public void ReadContentFromBookmark()
        {
            WorkSheet sheet = GetFirstBooksSheet();

            Assert.IsNotNull(sheet.Names["Content"]);

            DefinedName bookmark = sheet.Names["Content"];

            sheet.Output(bookmark.Address.StartRow, bookmark.Address.StartColumn);
        }
Esempio n. 10
0
        public CellRangeRef FindDefinedNameRange(string name)
        {
            DefinedName definedName = (
                from item in document.WorkbookPart.Workbook.DefinedNames.Elements <DefinedName>()
                where item.Name == name
                select item).Single();
            CellRangeRef range = new CellRangeRef(definedName.Text);

            return(range);
        }
Esempio n. 11
0
 protected override Boolean LocateRange(IWorkbook book)
 {
     if (book.DefinedNames.Contains(this.Name))
     {
         this.dname = book.DefinedNames.GetDefinedName(Name);
         return(true);
     }
     else
     {
         System.Windows.Forms.MessageBox.Show("无法找到" + this.Name + "所对应的区域");
     }
     return(false);
 }
Esempio n. 12
0
        void EnableControls()
        {
            Worksheet sheet = spreadsheetControl1.ActiveWorksheet;

            if (sheet.Name == "Invoice")
            {
                DefinedName invoiceItems = sheet.DefinedNames.GetDefinedName("InvoiceItems");
                btnRemoveRecord.Enabled = invoiceItems != null && invoiceItems.Range.RowCount > 1 && invoiceItems.Range.IsIntersecting(sheet.SelectedCell);
            }
            else
            {
                btnRemoveRecord.Enabled = false;
            }
        }
Esempio n. 13
0
        /// <summary>
        /// used the defined name within the workbook to show rows of the DefinedName (Range of cells)
        /// </summary>
        /// <param name="workbook">The workbook.</param>
        /// <param name="dn">The dn.</param>
        public static void ShowRowsOfDefinedName(this Workbook workbook, DefinedName dn)
        {
            string SheetName = "";
            uint   RowStart  = 0;
            uint   RowEnd    = 0;

            if (BreakDownDefinedName(workbook, dn, ref SheetName, ref RowStart, ref RowEnd))
            {
                WorksheetPart ws = workbook.GetWorksheetPartByName(SheetName);
                if (ws != null)
                {
                    ws.Worksheet.ShowRows(RowStart, RowEnd);
                }
            }
        }
        static void CreateNamedRange(Workbook workbook)
        {
            #region #NamedRange
            Worksheet worksheet = workbook.Worksheets[0];

            // Create a range.
            CellRange rangeB3D6 = worksheet.Range["B3:D6"];
            // Specify the name for the created range.
            rangeB3D6.Name = "rangeB3D6";

            // Create a new defined name with the specifed range name and absolute reference.
            DefinedName definedName = worksheet.DefinedNames.Add("rangeB17D20", "Sheet1!$B$17:$D$20");
            // Use the specified defined name to obtain the cell range.
            CellRange B17D20 = worksheet.Range[definedName.Name];
            #endregion #NamedRange
        }
Esempio n. 15
0
        public DefinedNameVal(DefinedName defName)
        {
            this.Key       = defName.Name;
            this.Reference = defName.InnerText;
            this.SheetName = this.Reference.Split('!')[0].Trim('\'');
            //Assumption: None of the defined names are relative defined names (i.e. A1).
            string range = this.Reference.Split('!')[1];

            string[] rangeArray = range.Split('$');
            this.StartColumn = rangeArray[1];
            this.StartRow    = rangeArray[2].TrimEnd(':');
            if (rangeArray.Length > 3)
            {
                this.EndColumn = rangeArray[3];
                this.EndRow    = rangeArray[4];
            }
        }
Esempio n. 16
0
        public void WorksheetPrintAreaTest()
        {
            MemoryStream        stream        = SpreadsheetReader.Create();
            SpreadsheetDocument doc           = SpreadsheetDocument.Open(stream, true);
            WorksheetPart       worksheetPart = SpreadsheetReader.GetWorksheetPartByName(doc, "Sheet1");
            WorksheetWriter     writer        = new WorksheetWriter(doc, worksheetPart);

            writer.PasteText("A1", "Set print area to A1:B9");

            //Test setting the print area
            DefinedName area = writer.SetPrintArea("Sheet1", "A1", "B9");

            //Save to the memory stream, and then to a file
            SpreadsheetWriter.Save(doc);
            SpreadsheetWriter.StreamToFile(string.Format("{0}\\printarea.xlsx", GetOutputFolder()), stream);

            //Assert.IsTrue(area != null, "Print area reference not returned.");
        }
Esempio n. 17
0
 // Add a new record to the invoice.
 void AddRecord(Worksheet sheet)
 {
     spreadsheetControl1.BeginUpdate();
     try {
         DefinedName invoiceItems = sheet.DefinedNames.GetDefinedName("InvoiceItems");
         int         rowIndex     = invoiceItems.Range.BottomRowIndex;
         sheet.Rows.Insert(rowIndex);
         sheet.Rows[rowIndex].Height = sheet.Rows[rowIndex + 1].Height;
         CellRange range     = invoiceItems.Range;
         CellRange itemRange = sheet.Range.FromLTRB(range.LeftColumnIndex, range.BottomRowIndex, range.RightColumnIndex, range.BottomRowIndex);
         MoveUpLastRecord(itemRange);
         InitializeRecord(itemRange);
         spreadsheetControl1.SelectedCell = itemRange[1];
     }
     finally {
         spreadsheetControl1.EndUpdate();
     }
 }
Esempio n. 18
0
        /// <summary>
        /// Private ctor. Prevents public construction.<br/>
        /// Loads the model from the supplied <see cref="DefinedName"/>
        /// </summary>
        /// <param name="wb">The workbool</param>
        /// <param name="definedName">The named range</param>
        private DefinedNameModel(Workbook wb, DefinedName definedName)
        {
            this.IsDefined = wb.BreakDownDefinedName(definedName, ref worksheetName, ref rowStart, ref rowEnd, ref colStart, ref colEnd);

            if (this.IsDefined)
            {
                var wsPart = wb.GetWorksheetPartByName(worksheetName);
                this.Worksheet = wsPart.Worksheet;
                this.SheetData = this.Worksheet.GetFirstChild <SheetData>();

                //get cells to be cloned according to the specified rows and columns
                this.Cells = this.SheetData.Descendants <DocumentFormat.OpenXml.Spreadsheet.Cell>().Where(c =>
                                                                                                          CellExtensions.GetRowIndex(c.CellReference) >= rowStart &&
                                                                                                          CellExtensions.GetRowIndex(c.CellReference) <= rowEnd &&
                                                                                                          CellExtensions.GetColumnIndex(c.CellReference) >= colStart &&
                                                                                                          CellExtensions.GetColumnIndex(c.CellReference) <= colEnd)
                             .ToList <DocumentFormat.OpenXml.Spreadsheet.Cell>();
            }
        }
        private void WriteDefinedName(WorkbookPart workbookPart, WorksheetPart wssheatpart)
        {
            try
            {
                int rows   = wssheatpart.Worksheet.GetFirstChild <SheetData>().Elements <Row>().Count();
                int cols   = wssheatpart.Worksheet.GetFirstChild <SheetData>().Elements <Row>().First().Elements <Cell>().Count();
                var dfname = new DefinedName()
                {
                    Name = "mydata"
                };
                string colname = ColumnIndexToColumnLetter(cols);
                dfname.Text = $"rawdata!$A$1:${colname}${rows}";


                workbookPart.Workbook.DefinedNames.Append(dfname);
            }
            catch (Exception ex)
            {
            }
        }
Esempio n. 20
0
 internal void FromDefinedName(DefinedName dn)
 {
     this.SetAllNull();
     this.Text = dn.Text ?? string.Empty;
     this.Name = dn.Name.Value;
     if (dn.Comment != null) this.Comment = dn.Comment.Value;
     if (dn.CustomMenu != null) this.CustomMenu = dn.CustomMenu.Value;
     if (dn.Description != null) this.Description = dn.Description.Value;
     if (dn.Help != null) this.Help = dn.Help.Value;
     if (dn.StatusBar != null) this.StatusBar = dn.StatusBar.Value;
     if (dn.LocalSheetId != null) this.LocalSheetId = dn.LocalSheetId.Value;
     if (dn.Hidden != null) this.Hidden = dn.Hidden.Value;
     if (dn.Function != null) this.Function = dn.Function.Value;
     if (dn.VbProcedure != null) this.VbProcedure = dn.VbProcedure.Value;
     if (dn.Xlm != null) this.Xlm = dn.Xlm.Value;
     if (dn.FunctionGroupId != null) this.FunctionGroupId = dn.FunctionGroupId.Value;
     if (dn.ShortcutKey != null) this.ShortcutKey = dn.ShortcutKey.Value;
     if (dn.PublishToServer != null) this.PublishToServer = dn.PublishToServer.Value;
     if (dn.WorkbookParameter != null) this.WorkbookParameter = dn.WorkbookParameter.Value;
 }
Esempio n. 21
0
        /// <summary>
        /// Returns an instance of a <see cref="DefinedNameModel"/> for a defined name (named range) with in a specified workbook.<br/>
        /// TODO: Does not take defined name scope into consideration yet. Investigate Worksheet scope defined names.
        /// </summary>
        /// <param name="wb"></param>
        /// <param name="definedName"></param>
        /// <returns></returns>
        public static DefinedNameModel GetDefinedNameModel(Workbook wb, string definedName)
        {
            if (wb == null)
            {
                throw new ArgumentNullException("wb");
            }
            if (string.IsNullOrEmpty(definedName))
            {
                throw new ArgumentNullException("definedName");
            }

            DefinedNameModel definedNameModel = null;
            DefinedName      dn = wb.GetDefinedNameByName(definedName);

            if (dn != null)
            {
                definedNameModel      = new DefinedNameModel(wb, dn);
                definedNameModel.Name = definedName;
            }
            return(definedNameModel);
        }
Esempio n. 22
0
        /// <summary>
        /// Breaks the name of down defined.
        /// </summary>
        /// <param name="workbook">The workbook.</param>
        /// <param name="dn">The dn.</param>
        /// <param name="SheetName">Name of the sheet.</param>
        /// <param name="RowStart">The row start.</param>
        /// <param name="RowEnd">The row end.</param>
        /// <param name="ColStart">The col start.</param>
        /// <param name="ColEnd">The col end.</param>
        /// <returns></returns>
        public static bool BreakDownDefinedName(this Workbook workbook, DefinedName dn, ref string SheetName, ref uint RowStart, ref uint RowEnd, ref uint ColStart, ref uint ColEnd)
        {
            bool val = BreakDownDefinedName(workbook, dn, ref SheetName, ref RowStart, ref RowEnd);

            // Example "Disclaimer!$A$3:$AW$35"

            string RangePart = dn.Text.Split('!')[1];   // Table the string to right of the !

            string StartPart = RangePart.Split(':')[0]; // the LHS of the :
            string EndPart   = RangePart.Split(':')[1]; // the RHS of the :

            string StartColLetter = StartPart.Split('$')[1].ToString();
            string EndColLetter   = EndPart.Split('$')[1].ToString();

            char[] StartColChars = StartColLetter.ToCharArray();
            char[] EndColChars   = EndColLetter.ToCharArray();

            ColStart = Helpers.ColLetterNumber(StartColChars);
            ColEnd   = Helpers.ColLetterNumber(EndColChars);

            return(val);
        }
Esempio n. 23
0
        internal DefinedName ToDefinedName()
        {
            DefinedName dn = new DefinedName();
            dn.Text = this.Text;
            dn.Name = this.Name;
            if (this.Comment != null) dn.Comment = this.Comment;
            if (this.CustomMenu != null) dn.CustomMenu = this.CustomMenu;
            if (this.Description != null) dn.Description = this.Description;
            if (this.Help != null) dn.Help = this.Help;
            if (this.StatusBar != null) dn.StatusBar = this.StatusBar;
            if (this.LocalSheetId != null) dn.LocalSheetId = this.LocalSheetId.Value;
            if (this.Hidden != null && this.Hidden != false) dn.Hidden = this.Hidden.Value;
            if (this.Function != null && this.Function != false) dn.Function = this.Function.Value;
            if (this.VbProcedure != null && this.VbProcedure != false) dn.VbProcedure = this.VbProcedure.Value;
            if (this.Xlm != null && this.Xlm != false) dn.Xlm = this.Xlm.Value;
            if (this.FunctionGroupId != null) dn.FunctionGroupId = this.FunctionGroupId.Value;
            if (this.ShortcutKey != null) dn.ShortcutKey = this.ShortcutKey;
            if (this.PublishToServer != null && this.PublishToServer != false) dn.PublishToServer = this.PublishToServer.Value;
            if (this.WorkbookParameter != null && this.WorkbookParameter != false) dn.WorkbookParameter = this.WorkbookParameter.Value;

            return dn;
        }
Esempio n. 24
0
        private void CreateAutoFilterDefinedName()
        {
            var workbook = document.WorkbookPart.Workbook;

            if (workbook.DefinedNames == null)
            {
                workbook.DefinedNames = new DefinedNames();
            }

            var lastColumnIndex  = rowsWriter.ColumnCount - 1;
            var lastColumnLetter = OXLHelper.GetColumnLetter(lastColumnIndex);
            var rowCount         = rowsWriter.RowCount;

            var definedName = new DefinedName($"'{sheetName}'!$A$1:${lastColumnLetter}${rowCount}")
            {
                Name         = "_xlnm._FilterDatabase",
                LocalSheetId = 0,
                Hidden       = true
            };

            workbook.DefinedNames.AppendChild(definedName);
        }
Esempio n. 25
0
        void SpreadsheetControl_CustomDrawCell(object sender, XtraSpreadsheet.CustomDrawCellEventArgs e)
        {
            Worksheet sheet = e.Cell.Worksheet;

            if (sheet.Name != "Invoice")
            {
                return;
            }
            DefinedName invoiceItems = sheet.DefinedNames.GetDefinedName("InvoiceItems");

            // Add Order Item
            if (e.Cell.ColumnIndex == 2 &&
                e.Cell.RowIndex == (invoiceItems == null ? 21 : invoiceItems.Range.BottomRowIndex + 1))
            {
                DrawLink(e, e.Cache, "Add Order Item");
            }
            // Delete Order Item
            if (invoiceItems != null && e.Cell.ColumnIndex == 13 && invoiceItems.Range.RowCount > 1 &&
                e.Cell.RowIndex >= invoiceItems.Range.TopRowIndex && e.Cell.RowIndex <= invoiceItems.Range.BottomRowIndex)
            {
                DrawLink(e, e.Cache, "Delete Order Item");
            }
        }
Esempio n. 26
0
        private void LoadWorkbook(String path, String relType)
        {
            //Process workbook relationships

            Dictionary <String, CT_Relationship> sheetRels = new Dictionary <string, CT_Relationship>();
            String filePath;
            String fileName;

            PathUtil.SplitFilePath(path, out filePath, out fileName);
            var relsPath = PathUtil.CombinePaths(filePath, String.Format("/_rels/{0}.rels", fileName));

            if (FileExists(relsPath))
            {
                //Debug.WriteLine("");
                //Debug.WriteLine("Workbook relationships:");

                var workbookRels = ReadFile <CT_Relationships>(relsPath);
                sharedStrings = new SharedStrings();

                foreach (var rel in workbookRels.Relationship)
                {
                    //Debug.WriteLine(String.Format("{0} {1} {2}", rel.Id, rel.Target, rel.Type));
                    var partPath    = PathUtil.CombinePaths(filePath, rel.Target);
                    var contentType = contentTypes.ResolvePartType(partPath);
                    switch (contentType)
                    {
                    case ContentTypes.SharedStrings:
                        ReadSharedStrings(partPath);
                        break;

                    case ContentTypes.Sheet:
                        sheetRels.Add(rel.Id, rel);
                        break;

                    case ContentTypes.Styles:
                        LoadStyles(partPath);
                        break;
                    }
                }
            }

            //Process workbook data
            var wb = ReadFile <CT_Workbook>(path);

            //Debug.WriteLine("");
            //Debug.WriteLine("Sheets: ");
            foreach (var sheetInfo in wb.sheets)
            {
                //Debug.WriteLine(String.Format("{2} {0}: {1}", sheetInfo.name, sheetInfo.sheetId, sheetInfo.id));
                var             sheet = new Sheet(sheetInfo.name);
                CT_Relationship rel;
                if (sheetRels.TryGetValue(sheetInfo.id, out rel))
                {
                    var partPath = PathUtil.CombinePaths(filePath, rel.Target);
                    ReadSheet(partPath, sheet);
                }

                workbook.Sheets.AddSheet(sheet);
            }

            if (wb.definedNames != null)
            {
                foreach (var dn in wb.definedNames)
                {
                    DefinedName definedName = new DefinedName
                    {
                        Name  = dn.name,
                        Value = dn.Value
                    };

                    if (dn.localSheetIdSpecified)
                    {
                        workbook.Sheets[(int)dn.localSheetId].DefinedNames.AddDefinedName(definedName);
                    }
                    else
                    {
                        workbook.DefinedNames.AddDefinedName(definedName);
                    }
                }
            }
        }
Esempio n. 27
0
 internal void FromDefinedName(DefinedName dn)
 {
     this.SetAllNull();
     this.Text = dn.Text ?? string.Empty;
     this.Name = dn.Name.Value;
     if (dn.Comment != null)
     {
         this.Comment = dn.Comment.Value;
     }
     if (dn.CustomMenu != null)
     {
         this.CustomMenu = dn.CustomMenu.Value;
     }
     if (dn.Description != null)
     {
         this.Description = dn.Description.Value;
     }
     if (dn.Help != null)
     {
         this.Help = dn.Help.Value;
     }
     if (dn.StatusBar != null)
     {
         this.StatusBar = dn.StatusBar.Value;
     }
     if (dn.LocalSheetId != null)
     {
         this.LocalSheetId = dn.LocalSheetId.Value;
     }
     if (dn.Hidden != null)
     {
         this.Hidden = dn.Hidden.Value;
     }
     if (dn.Function != null)
     {
         this.Function = dn.Function.Value;
     }
     if (dn.VbProcedure != null)
     {
         this.VbProcedure = dn.VbProcedure.Value;
     }
     if (dn.Xlm != null)
     {
         this.Xlm = dn.Xlm.Value;
     }
     if (dn.FunctionGroupId != null)
     {
         this.FunctionGroupId = dn.FunctionGroupId.Value;
     }
     if (dn.ShortcutKey != null)
     {
         this.ShortcutKey = dn.ShortcutKey.Value;
     }
     if (dn.PublishToServer != null)
     {
         this.PublishToServer = dn.PublishToServer.Value;
     }
     if (dn.WorkbookParameter != null)
     {
         this.WorkbookParameter = dn.WorkbookParameter.Value;
     }
 }
Esempio n. 28
0
        internal DefinedName ToDefinedName()
        {
            DefinedName dn = new DefinedName();

            dn.Text = this.Text;
            dn.Name = this.Name;
            if (this.Comment != null)
            {
                dn.Comment = this.Comment;
            }
            if (this.CustomMenu != null)
            {
                dn.CustomMenu = this.CustomMenu;
            }
            if (this.Description != null)
            {
                dn.Description = this.Description;
            }
            if (this.Help != null)
            {
                dn.Help = this.Help;
            }
            if (this.StatusBar != null)
            {
                dn.StatusBar = this.StatusBar;
            }
            if (this.LocalSheetId != null)
            {
                dn.LocalSheetId = this.LocalSheetId.Value;
            }
            if (this.Hidden != null && this.Hidden != false)
            {
                dn.Hidden = this.Hidden.Value;
            }
            if (this.Function != null && this.Function != false)
            {
                dn.Function = this.Function.Value;
            }
            if (this.VbProcedure != null && this.VbProcedure != false)
            {
                dn.VbProcedure = this.VbProcedure.Value;
            }
            if (this.Xlm != null && this.Xlm != false)
            {
                dn.Xlm = this.Xlm.Value;
            }
            if (this.FunctionGroupId != null)
            {
                dn.FunctionGroupId = this.FunctionGroupId.Value;
            }
            if (this.ShortcutKey != null)
            {
                dn.ShortcutKey = this.ShortcutKey;
            }
            if (this.PublishToServer != null && this.PublishToServer != false)
            {
                dn.PublishToServer = this.PublishToServer.Value;
            }
            if (this.WorkbookParameter != null && this.WorkbookParameter != false)
            {
                dn.WorkbookParameter = this.WorkbookParameter.Value;
            }

            return(dn);
        }
Esempio n. 29
0
        private static void WriteDataTableToExcelWorksheet(DataTable dt, WorksheetPart worksheetPart, DefinedNames definedNamesCol)
        {
            OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart, Encoding.ASCII);

            writer.WriteStartElement(new Worksheet());

            //  To demonstrate how to set column-widths in Excel, here's how to set the width of all columns to our default of "25":
            UInt32 inx = 1;

            writer.WriteStartElement(new Columns());
            foreach (DataColumn dc in dt.Columns)
            {
                writer.WriteElement(new Column {
                    Min = inx, Max = inx, CustomWidth = true, Width = DEFAULT_COLUMN_WIDTH
                });
                inx++;
            }
            writer.WriteEndElement();


            writer.WriteStartElement(new SheetData());

            string cellValue     = "";
            string cellReference = "";

            //  Create a Header Row in our Excel file, containing one header for each Column of data in our DataTable.
            //
            //  We'll also create an array, showing which type each column of data is (Text or Numeric), so when we come to write the actual
            //  cells of data, we'll know if to write Text values or Numeric cell values.
            int numberOfColumns = dt.Columns.Count;

            bool[] IsIntegerColumn = new bool[numberOfColumns];
            bool[] IsFloatColumn   = new bool[numberOfColumns];
            bool[] IsDateColumn    = new bool[numberOfColumns];

            string[] excelColumnNames = new string[numberOfColumns];
            for (int n = 0; n < numberOfColumns; n++)
            {
                excelColumnNames[n] = GetExcelColumnName(n);
            }

            //
            //  Create the Header row in our Excel Worksheet
            //  We'll set the row-height to 20px, and (using the "AppendHeaderTextCell" function) apply some formatting to the cells.
            //
            uint rowIndex = 1;

            writer.WriteStartElement(new Row {
                RowIndex = rowIndex, Height = 20, CustomHeight = true
            });
            for (int colInx = 0; colInx < numberOfColumns; colInx++)
            {
                DataColumn col = dt.Columns[colInx];
                AppendHeaderTextCell(excelColumnNames[colInx] + "1", col.ColumnName, writer);
                IsIntegerColumn[colInx] = (col.DataType.FullName.StartsWith("System.Int"));
                IsFloatColumn[colInx]   = (col.DataType.FullName == "System.Decimal") || (col.DataType.FullName == "System.Double") || (col.DataType.FullName == "System.Single");
                IsDateColumn[colInx]    = (col.DataType.FullName == "System.DateTime");

                //  Uncomment the following lines, for an example of how to create some Named Ranges in your Excel file
#if FALSE
                //  For each column of data in this worksheet, let's create a Named Range, showing where there are values in this column
                //       eg  "NamedRange_UserID"  = "Drivers!$A2:$A6"
                //           "NamedRange_Surname" = "Drivers!$B2:$B6"
                string      columnHeader = col.ColumnName.Replace(" ", "_");
                string      NamedRange   = string.Format("{0}!${1}2:${2}{3}", worksheetName, excelColumnNames[colInx], excelColumnNames[colInx], dt.Rows.Count + 1);
                DefinedName definedName  = new DefinedName()
                {
                    Name = "NamedRange_" + columnHeader,
                    Text = NamedRange
                };
                definedNamesCol.Append(definedName);
#endif
            }
            writer.WriteEndElement();   //  End of header "Row"

            //
            //  Now, step through each row of data in our DataTable...
            //
            double      cellFloatValue = 0;
            CultureInfo ci             = new CultureInfo("en-US");
            foreach (DataRow dr in dt.Rows)
            {
                // ...create a new row, and append a set of this row's data to it.
                ++rowIndex;

                writer.WriteStartElement(new Row {
                    RowIndex = rowIndex
                });

                for (int colInx = 0; colInx < numberOfColumns; colInx++)
                {
                    cellValue     = dr.ItemArray[colInx].ToString();
                    cellValue     = ReplaceHexadecimalSymbols(cellValue);
                    cellReference = excelColumnNames[colInx] + rowIndex.ToString();

                    // Create cell with data
                    if (IsIntegerColumn[colInx] || IsFloatColumn[colInx])
                    {
                        //  For numeric cells without any decimal places.
                        //  If this numeric value is NULL, then don't write anything to the Excel file.
                        cellFloatValue = 0;
                        bool bIncludeDecimalPlaces = IsFloatColumn[colInx];
                        if (double.TryParse(cellValue, out cellFloatValue))
                        {
                            cellValue = cellFloatValue.ToString(ci);
                            AppendNumericCell(cellReference, cellValue, bIncludeDecimalPlaces, writer);
                        }
                    }
                    else if (IsDateColumn[colInx])
                    {
                        //  For date values, we save the value to Excel as a number, but need to set the cell's style to format
                        //  it as either a date or a date-time.
                        DateTime dateValue;
                        if (DateTime.TryParse(cellValue, out dateValue))
                        {
                            AppendDateCell(cellReference, dateValue, writer);
                        }
                        else
                        {
                            //  This should only happen if we have a DataColumn of type "DateTime", but this particular value is null/blank.
                            AppendTextCell(cellReference, cellValue, writer);
                        }
                    }
                    else
                    {
                        //  For text cells, just write the input data straight out to the Excel file.
                        AppendTextCell(cellReference, cellValue, writer);
                    }
                }
                writer.WriteEndElement(); //  End of Row
            }
            writer.WriteEndElement();     //  End of SheetData
            writer.WriteEndElement();     //  End of worksheet

            writer.Close();
        }
 bool IsRangeForAddCommand(Cell cell, DefinedName invoiceItems)
 {
     return(cell.ColumnIndex == 6 && cell.RowIndex == (invoiceItems == null || invoiceItems.Range == null ? 21 : invoiceItems.Range.BottomRowIndex + 1));
 }
 bool IsRangeForDeleteCommand(Cell cell, DefinedName invoiceItems)
 {
     return(invoiceItems != null && invoiceItems.Range != null && cell.ColumnIndex == 10 && invoiceItems.Range.RowCount > 1 &&
            cell.RowIndex >= invoiceItems.Range.TopRowIndex && cell.RowIndex <= invoiceItems.Range.BottomRowIndex);
 }
        private void GenerateWorkbookPartContent(WorkbookPart workbookPart, SaveContext context)
        {
            if (workbookPart.Workbook == null)
                workbookPart.Workbook = new Workbook();

            var workbook = workbookPart.Workbook;
            if (
                !workbook.NamespaceDeclarations.Contains(new KeyValuePair<string, string>("r",
                    "http://schemas.openxmlformats.org/officeDocument/2006/relationships")))
            {
                workbook.AddNamespaceDeclaration("r",
                    "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            }

            #region WorkbookProperties

            if (workbook.WorkbookProperties == null)
                workbook.WorkbookProperties = new WorkbookProperties();

            if (workbook.WorkbookProperties.CodeName == null)
                workbook.WorkbookProperties.CodeName = "ThisWorkbook";

            if (Use1904DateSystem)
                workbook.WorkbookProperties.Date1904 = true;

            #endregion

            if (workbook.BookViews == null)
                workbook.BookViews = new BookViews();

            if (workbook.Sheets == null)
                workbook.Sheets = new Sheets();

            var worksheets = WorksheetsInternal;
            workbook.Sheets.Elements<Sheet>().Where(s => worksheets.Deleted.Contains(s.Id)).ToList().ForEach(
                s => s.Remove());

            foreach (var sheet in workbook.Sheets.Elements<Sheet>())
            {
                var sheetId = (Int32)sheet.SheetId.Value;

                if (WorksheetsInternal.All<XLWorksheet>(w => w.SheetId != sheetId)) continue;

                var wks = WorksheetsInternal.Single<XLWorksheet>(w => w.SheetId == sheetId);
                wks.RelId = sheet.Id;
                sheet.Name = wks.Name;
            }

            foreach (var xlSheet in
                WorksheetsInternal.Cast<XLWorksheet>().Where(s => s.SheetId == 0).OrderBy(w => w.Position))
            {
                var rId = context.RelIdGenerator.GetNext(RelType.Workbook);

                while (WorksheetsInternal.Cast<XLWorksheet>().Any(w => w.SheetId == Int32.Parse(rId.Substring(3))))
                    rId = context.RelIdGenerator.GetNext(RelType.Workbook);

                xlSheet.SheetId = Int32.Parse(rId.Substring(3));
                xlSheet.RelId = rId;
                var newSheet = new Sheet
                {
                    Name = xlSheet.Name,
                    Id = rId,
                    SheetId = (UInt32)xlSheet.SheetId
                };

                workbook.Sheets.AppendChild(newSheet);
            }

            var sheetElements = from sheet in workbook.Sheets.Elements<Sheet>()
                join worksheet in ((IEnumerable<XLWorksheet>)WorksheetsInternal) on sheet.Id.Value
                    equals worksheet.RelId
                orderby worksheet.Position
                select sheet;

            UInt32 firstSheetVisible = 0;
            var activeTab =
                (from us in UnsupportedSheets where us.IsActive select (UInt32)us.Position - 1).FirstOrDefault();
            var foundVisible = false;

            var totalSheets = sheetElements.Count() + UnsupportedSheets.Count;
            for (var p = 1; p <= totalSheets; p++)
            {
                if (UnsupportedSheets.All(us => us.Position != p))
                {
                    var sheet = sheetElements.ElementAt(p - UnsupportedSheets.Count(us => us.Position <= p) - 1);
                    workbook.Sheets.RemoveChild(sheet);
                    workbook.Sheets.AppendChild(sheet);
                    var xlSheet = Worksheet(sheet.Name);
                    if (xlSheet.Visibility != XLWorksheetVisibility.Visible)
                        sheet.State = xlSheet.Visibility.ToOpenXml();

                    if (foundVisible) continue;

                    if (sheet.State == null || sheet.State == SheetStateValues.Visible)
                        foundVisible = true;
                    else
                        firstSheetVisible++;
                }
                else
                {
                    var sheetId = UnsupportedSheets.First(us => us.Position == p).SheetId;
                    var sheet = workbook.Sheets.Elements<Sheet>().First(s => s.SheetId == sheetId);
                    workbook.Sheets.RemoveChild(sheet);
                    workbook.Sheets.AppendChild(sheet);
                }
            }

            var workbookView = workbook.BookViews.Elements<WorkbookView>().FirstOrDefault();

            if (activeTab == 0)
            {
                activeTab = firstSheetVisible;
                foreach (var ws in worksheets)
                {
                    if (!ws.TabActive) continue;

                    activeTab = (UInt32)(ws.Position - 1);
                    break;
                }
            }

            if (workbookView == null)
            {
                workbookView = new WorkbookView {ActiveTab = activeTab, FirstSheet = firstSheetVisible};
                workbook.BookViews.AppendChild(workbookView);
            }
            else
            {
                workbookView.ActiveTab = activeTab;
                workbookView.FirstSheet = firstSheetVisible;
            }

            var definedNames = new DefinedNames();
            foreach (var worksheet in WorksheetsInternal)
            {
                var wsSheetId = (UInt32)worksheet.SheetId;
                UInt32 sheetId = 0;
                foreach (var s in workbook.Sheets.Elements<Sheet>().TakeWhile(s => s.SheetId != wsSheetId))
                {
                    sheetId++;
                }

                if (worksheet.PageSetup.PrintAreas.Any())
                {
                    var definedName = new DefinedName {Name = "_xlnm.Print_Area", LocalSheetId = sheetId};
                    var worksheetName = worksheet.Name;
                    var definedNameText = worksheet.PageSetup.PrintAreas.Aggregate(String.Empty,
                        (current, printArea) =>
                            current +
                            ("'" + worksheetName + "'!" +
                             printArea.RangeAddress.
                                 FirstAddress.ToStringFixed(
                                     XLReferenceStyle.A1) +
                             ":" +
                             printArea.RangeAddress.
                                 LastAddress.ToStringFixed(
                                     XLReferenceStyle.A1) +
                             ","));
                    definedName.Text = definedNameText.Substring(0, definedNameText.Length - 1);
                    definedNames.AppendChild(definedName);
                }

                if (worksheet.AutoFilter.Enabled)
                {
                    var definedName = new DefinedName
                    {
                        Name = "_xlnm._FilterDatabase",
                        LocalSheetId = sheetId,
                        Text = "'" + worksheet.Name + "'!" +
                               worksheet.AutoFilter.Range.RangeAddress.FirstAddress.ToStringFixed(
                                   XLReferenceStyle.A1) +
                               ":" +
                               worksheet.AutoFilter.Range.RangeAddress.LastAddress.ToStringFixed(
                                   XLReferenceStyle.A1),
                        Hidden = BooleanValue.FromBoolean(true)
                    };
                    definedNames.AppendChild(definedName);
                }

                foreach (var nr in worksheet.NamedRanges.Where(n => n.Name != "_xlnm._FilterDatabase"))
                {
                    var definedName = new DefinedName
                    {
                        Name = nr.Name,
                        LocalSheetId = sheetId,
                        Text = nr.ToString()
                    };
                    if (!XLHelper.IsNullOrWhiteSpace(nr.Comment))
                        definedName.Comment = nr.Comment;
                    definedNames.AppendChild(definedName);
                }


                var definedNameTextRow = String.Empty;
                var definedNameTextColumn = String.Empty;
                if (worksheet.PageSetup.FirstRowToRepeatAtTop > 0)
                {
                    definedNameTextRow = "'" + worksheet.Name + "'!" + worksheet.PageSetup.FirstRowToRepeatAtTop
                                         + ":" + worksheet.PageSetup.LastRowToRepeatAtTop;
                }
                if (worksheet.PageSetup.FirstColumnToRepeatAtLeft > 0)
                {
                    var minColumn = worksheet.PageSetup.FirstColumnToRepeatAtLeft;
                    var maxColumn = worksheet.PageSetup.LastColumnToRepeatAtLeft;
                    definedNameTextColumn = "'" + worksheet.Name + "'!" +
                                            XLHelper.GetColumnLetterFromNumber(minColumn)
                                            + ":" + XLHelper.GetColumnLetterFromNumber(maxColumn);
                }

                string titles;
                if (definedNameTextColumn.Length > 0)
                {
                    titles = definedNameTextColumn;
                    if (definedNameTextRow.Length > 0)
                        titles += "," + definedNameTextRow;
                }
                else
                    titles = definedNameTextRow;

                if (titles.Length <= 0) continue;

                var definedName2 = new DefinedName
                {
                    Name = "_xlnm.Print_Titles",
                    LocalSheetId = sheetId,
                    Text = titles
                };

                definedNames.AppendChild(definedName2);
            }

            foreach (var nr in NamedRanges)
            {
                var definedName = new DefinedName
                {
                    Name = nr.Name,
                    Text = nr.ToString()
                };
                if (!XLHelper.IsNullOrWhiteSpace(nr.Comment))
                    definedName.Comment = nr.Comment;
                definedNames.AppendChild(definedName);
            }

            workbook.DefinedNames = definedNames;

            if (workbook.CalculationProperties == null)
                workbook.CalculationProperties = new CalculationProperties {CalculationId = 125725U};

            if (CalculateMode == XLCalculateMode.Default)
                workbook.CalculationProperties.CalculationMode = null;
            else
                workbook.CalculationProperties.CalculationMode = CalculateMode.ToOpenXml();

            if (ReferenceStyle == XLReferenceStyle.Default)
                workbook.CalculationProperties.ReferenceMode = null;
            else
                workbook.CalculationProperties.ReferenceMode = ReferenceStyle.ToOpenXml();
        }
Esempio n. 33
0
        private UInt32 SetValueFromDataTable(DataTable dataTable, SpreadsheetDocument RecultDoc, SpreadsheetDocument TemleytDoc, UInt32 CurOffset)
        {
            UInt32 newOffset = 0;
            string RangeName = dataTable.TableName;
            //   SpreadsheetDocument TemleytDoc = SpreadsheetDocument.Open(Temleyt, true);

            DefinedName DefName = SpreadsheetReader.GetDefinedName(TemleytDoc, RangeName);

            if (DefName != null)
            {
                if (DefName.Text.IndexOf("#REF!") < 0)
                {
                    string definedName     = DefName.Text;
                    string WorkSheetName   = definedName.Substring(0, definedName.IndexOf("!")).TrimEnd('\'').TrimStart('\'');
                    string Range           = definedName.Substring(definedName.IndexOf("!") + 1);
                    UInt32 startRowInRange = FirstRowInRange(Range);
                    UInt32 endRowInRange   = LastRowInRange(Range);
                    UInt32 serviceRow      = 1;
                    UInt32 CountRangeData  = (endRowInRange - startRowInRange + 1) - serviceRow;

                    WorksheetPart TemleytWorkSheet = SpreadsheetReader.GetWorksheetPartByName(TemleytDoc, WorkSheetName);

                    List <Row> ListRowInRange = TemleytWorkSheet.Worksheet.Elements <SheetData>().First().Elements <Row>()
                                                .Where(r => r.RowIndex >= startRowInRange && r.RowIndex < endRowInRange).ToList();
                    List <Row> ListRowBottom = TemleytWorkSheet.Worksheet.Elements <SheetData>().First().Elements <Row>()
                                               .Where(r => r.RowIndex > endRowInRange).ToList();
                    List <Row> ServiceRow = TemleytWorkSheet.Worksheet.Elements <SheetData>().First().Elements <Row>()
                                            .Where(r => r.RowIndex == endRowInRange).ToList();

                    List <MergeCell> ListMCellInRange = new List <MergeCell>();
                    List <MergeCell> ListMCellBottom  = new List <MergeCell>();
                    MergeCells       mergeCells       = TemleytWorkSheet.Worksheet.GetFirstChild <MergeCells>();
                    if (mergeCells != null)
                    {
                        ListMCellInRange = TemleytWorkSheet.Worksheet.Elements <MergeCells>().First().Elements <MergeCell>()
                                           .Where(r => SpreadsheetReader.RowFromReference(FirstRefFromRange(r.Reference.Value)) >= startRowInRange && SpreadsheetReader.RowFromReference(LastRefFromRange(r.Reference.Value)) <= endRowInRange).ToList();
                        ListMCellBottom = TemleytWorkSheet.Worksheet.Elements <MergeCells>().First().Elements <MergeCell>()
                                          .Where(r => SpreadsheetReader.RowFromReference(FirstRefFromRange(r.Reference.Value)) > endRowInRange).ToList();
                    }
                    UInt32 NewStartRow = startRowInRange + CurOffset;

                    WorksheetPart   RecultWorkSheetPart = SpreadsheetReader.GetWorksheetPartByName(RecultDoc, WorkSheetName);
                    WorksheetWriter RecultWriter        = new WorksheetWriter(RecultDoc, RecultWorkSheetPart);
                    DeleteRows(RecultDoc, RecultWriter, NewStartRow, CountRangeData + serviceRow);
                    if (ListRowBottom.Count() > 0)
                    {
                        DeleteRows(RecultDoc, RecultWriter, NewStartRow, ListRowBottom.Last().RowIndex.Value + CurOffset - NewStartRow + 1);
                    }

                    MaximumCount = dataTable.Rows.Count;

                    UInt32 InsideOffset = NewStartRow;
                    foreach (DataRow dataRow in dataTable.Rows)
                    {
                        UInt32 Offset = (InsideOffset - NewStartRow) + CurOffset;
                        if (dataRow.RowState.ToString() != "Deleted")
                        {
                            AppendRows(dataRow, ListRowInRange, ListMCellInRange, RecultWorkSheetPart, Offset);
                            InsideOffset += CountRangeData;
                        }
                        ++ProgressValue;
                    }

                    newOffset = (InsideOffset - NewStartRow - CountRangeData) + CurOffset;
                    AppendRows(null, ListRowBottom, ListMCellBottom, RecultWorkSheetPart, newOffset);

                    DefName      = SpreadsheetReader.GetDefinedName(RecultDoc, RangeName);
                    definedName  = DefName.Text;
                    DefName.Text = definedName.Substring(0, definedName.LastIndexOf('$') + 1) + InsideOffset.ToString();

                    //   DefName.Text = definedName.Substring(0, definedName.IndexOf("!") + 1) + '$' + SpreadsheetReader.ColumnFromReference(FirstRefFromRange(Range)) + '$' + NewStartRow.ToString() + ":$" + SpreadsheetReader.ColumnFromReference(LastRefFromRange(Range)) + '$' + StartClone.ToString();

                    //Обновляем ссилки начала и конца рабочих областей DefinedNames
                    foreach (DefinedName CurdefName in RecultDoc.WorkbookPart.Workbook.DefinedNames)
                    {
                        if (CurdefName.Text.IndexOf("#REF!") < 0)
                        {
                            //   if (CurdefName.Text == definedName)//Текущая облать DefinedName
                            //    {
                            //         CurdefName.Text = definedName.Substring(0, definedName.IndexOf("!") + 1) + '$' + SpreadsheetReader.ColumnFromReference(FirstRefFromRange(Range)) + '$' + NewStartRow.ToString() + ":$" + SpreadsheetReader.ColumnFromReference(LastRefFromRange(Range)) + '$' + StartOffset.ToString();
                            //      }
                            //     else //Все остальные DefinedName текущего листа Sheet
                            //      {
                            string strDefName = CurdefName.Text;
                            string sheetName  = strDefName.Substring(0, strDefName.IndexOf("!")).Trim('\'');
                            string range      = strDefName.Substring(strDefName.IndexOf("!") + 1);
                            if (sheetName == WorkSheetName)
                            {
                                string firstRefInRange = FirstRefFromRange(range);
                                string lastRefInRange  = LastRefFromRange(range);
                                UInt32 firstRow        = SpreadsheetReader.RowFromReference(firstRefInRange);
                                UInt32 lastRow         = SpreadsheetReader.RowFromReference(lastRefInRange);
                                if (firstRow + newOffset > InsideOffset + CurOffset)
                                {
                                    CurdefName.Text = strDefName.Substring(0, strDefName.IndexOf("!") + 1) + '$' + SpreadsheetReader.ColumnFromReference(firstRefInRange) + '$' + (firstRow + newOffset).ToString() + ":$" + SpreadsheetReader.ColumnFromReference(lastRefInRange) + '$' + (lastRow + newOffset).ToString();
                                }
                            }

                            //          }
                        }
                    }
                }
            }
            //   TemleytDoc.Close();
            return(newOffset);
        }