/// <summary> /// Read the Settings data rows. /// </summary> /// <param name="environments"></param> /// <param name="worksheetNav"></param> /// <param name="nm"></param> /// <returns></returns> private static void ReadTable(SettingsFile settingsFile, List <EnvironmentSettings> environments, XPathNavigator worksheetNav, XmlNamespaceManager nm) { // Select all of the rows in the worksheet XPathNodeIterator rowsIterator = worksheetNav.Select("//ss:Row", nm); // skip header rows until we find Settings var cell0 = rowsIterator.Current.SelectSingleNode("ss:Cell[1]/ss:Data", nm); while (cell0 == null || cell0.Value != "Settings:") { if (rowsIterator.MoveNext()) { cell0 = rowsIterator.Current.SelectSingleNode("ss:Cell[1]/ss:Data", nm); } else { throw new ArgumentException("The input file does not contain a row with a value in the first column equal to 'Settings:'."); } } // Loop through the rows while (rowsIterator.MoveNext()) { // Select all of the cells in the row XPathNodeIterator cellsIterator = rowsIterator.Current.Select("ss:Cell", nm); // this is the null Value object used to list all possibile settings names Setting setting = new Setting() { Originator = settingsFile.ApplicationName }; // Look for setting name if (!cellsIterator.MoveNext()) { throw new ArgumentException("The input file has an empty row."); } XPathNavigator dataNav = cellsIterator.Current.SelectSingleNode("ss:Data", nm); if (dataNav == null) { // no setting cell -> end of table break; } setting.Name = dataNav.Value; // Select the comment value in the cell, if present XPathNavigator commentNav = cellsIterator.Current.SelectSingleNode("ss:Comment/ss:Data", nm); if (commentNav != null) { setting.Comment = commentNav.Value; } string key = RegisterSetting(settingsFile, setting); // count from first env column int columnIndex = 0; // Loop through the remaining cells while (cellsIterator.MoveNext()) { // Select the data value in the cell, if present string indexAttr = cellsIterator.Current.GetAttribute("Index", ss); if (!string.IsNullOrEmpty(indexAttr)) { // index = 1 === column A // columnIndex = 0 === column B (i.e. Default Values environment) columnIndex = Convert.ToInt32(indexAttr) - 2; } // Select the data value in the cell, if present dataNav = cellsIterator.Current.SelectSingleNode("ss:Data", nm); if (dataNav != null) { // environment has only "valued" cells var cell = new Setting() { Name = setting.Name, Value = dataNav.Value, Originator = settingsFile.ApplicationName }; // Select the comment value in the cell, if present commentNav = cellsIterator.Current.SelectSingleNode("ss:Comment/ss:Data", nm); if (commentNav != null) { cell.Comment = commentNav.Value; } environments[columnIndex].Settings.Add(key, cell); } columnIndex++; } } }
internal virtual void ExportSettings(SettingsFile settingsFile, string outputFileName) { WriteFile(settingsFile, outputFileName); }
private static void WriteData(SettingsFile settingsFile, XmlElement table) { XmlElement cell, data; /* * <Row> * <Cell ss:StyleID="s72"><Data ss:Type="String">SampleSetting</Data><Comment * ss:Author="Thomas Abraham"><ss:Data * xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="Tahoma" * x:CharSet="1" html:Size="8" html:Color="#000000">Cell comments will be exported to the output XML files</Font></ss:Data></Comment></Cell> * <Cell ss:StyleID="Default"/> * <Cell ss:StyleID="Default"><Data ss:Type="String">LocalDevValue</Data></Cell> * <Cell ss:StyleID="Default"><Data ss:Type="String">SharedDevValue</Data></Cell> * <Cell ss:StyleID="Default"><Data ss:Type="String">QAValue</Data></Cell> * <Cell ss:StyleID="Default"><Data ss:Type="String">ProductionValue</Data></Cell> * </Row> */ var allKeys = settingsFile.Settings.Keys; foreach (var key in allKeys) { var row = table.OwnerDocument.CreateElement("ss:Row", ss); Setting setting = settingsFile.Settings[key]; // setting name cell = table.OwnerDocument.CreateElement("ss:Cell", ss); cell.SetAttribute("StyleID", ss, "s72"); row.AppendChild(cell); data = table.OwnerDocument.CreateElement("ss:Data", ss); data.SetAttribute("Type", ss, "String"); data.InnerText = setting.Name; cell.AppendChild(data); // setting comment if (!string.IsNullOrEmpty(setting.Comment)) { var comment = table.OwnerDocument.CreateElement("ss:Comment", ss); data = table.OwnerDocument.CreateElement("ss:Data", ss); data.InnerText = setting.Comment; comment.AppendChild(data); cell.AppendChild(comment); } foreach (var env in settingsFile.Environments) { // cell is added anyway cell = table.OwnerDocument.CreateElement("ss:Cell", ss); cell.SetAttribute("StyleID", ss, "Default"); row.AppendChild(cell); if (env.Value.Settings.ContainsKey(key)) { //data only if we have a value var value = env.Value.Settings[key]; data = table.OwnerDocument.CreateElement("ss:Data", ss); data.SetAttribute("Type", ss, "String"); data.InnerText = value.Value; cell.AppendChild(data); // setting's value comment if (!string.IsNullOrEmpty(value.Comment)) { var comment = table.OwnerDocument.CreateElement("ss:Comment", ss); data = table.OwnerDocument.CreateElement("ss:Data", ss); data.InnerText = value.Comment; comment.AppendChild(data); cell.AppendChild(comment); } } }//for table.AppendChild(row); }//for }
public BTDFEnvironmentSettings(System.IO.FileInfo fiEnvironmentSettings) { sf = (new SpreadsheetMLImporter()).ImportSettings(fiEnvironmentSettings.FullName); }