{"id":2693,"date":"2021-07-21T16:20:19","date_gmt":"2021-07-21T16:20:19","guid":{"rendered":"https:\/\/mindfusion.eu\/blog\/?p=2693"},"modified":"2021-07-21T16:26:59","modified_gmt":"2021-07-21T16:26:59","slug":"data-validation-formulas-and-conditional-formatting-in-spreadsheet-for-winforms","status":"publish","type":"post","link":"https:\/\/mindfusion.dev\/blog\/data-validation-formulas-and-conditional-formatting-in-spreadsheet-for-winforms\/","title":{"rendered":"Data Validation, Formulas and Conditional Formatting in Spreadsheet for WinForms"},"content":{"rendered":"<p>In this blog post we will demonstrate how the developer can use validation, formulas and conditional formatting on cells in a spreadsheet. We will build a sample spreadsheet that calculates application score for students. The final mark is the sum of the points in chemistry and biology. The points in these majors can come from Olympics or a competition: the bigger is considered. The points from the Olympics need to be converted to match the scale of the points from the competition.<\/p>\n<p>Here is the final application:<\/p>\n<p><a href=\"https:\/\/mindfusion.dev\/samples\/winforms\/spreadsheet\/student_scores.png\"><img decoding=\"async\" src=\"https:\/\/mindfusion.dev\/samples\/winforms\/spreadsheet\/student_scores.png\" title=\"Student score table with validation and formulas\"><\/a><br \/>\n<!--more--><br \/>\n<strong>I. General Setup for the Project<\/strong><\/p>\n<p>We have installed the Spreadsheet for WinForms library and drag and drop the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_WorkbookView_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: WorkbookView\">WorkbookView<\/a> icon on an empty work area of a blank WinForms project. You can add the spreadsheet manually, without installing the library if you add the MindFusion.Spreadsheet.WinForms dll to the toolbox. Either way, after you&#8217;ve dropped the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_WorkbookView.htm\" title=\"MindFusion Spreadsheet for WinForms: WorkbookView,\">WorkbookView,<\/a> you have an instance of the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_WorkbookView_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: WorkbookView\">WorkbookView<\/a> and a <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_Workbook_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: Workbook\">Workbook<\/a> instance created.<\/p>\n<p>If you run the application you will see an empty spreadsheet, which you can edit. We want to add data to our spreadsheet, so, we get the spreadsheet from the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_Workbook.htm\" title=\"MindFusion Spreadsheet for WinForms: Workbook\">Workbook<\/a> .<\/p>\n<pre>var activeSheet = workbookView.ActiveWorksheet;\nactiveSheet.BeginInit();  \n...............\nactiveSheet.EndInit();<\/pre>\n<p>In order to speed up performance, we place all code for initializing the spreadsheet between the methods <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?M_MindFusion_Spreadsheet_Worksheet_BeginInit_0.htm\" title=\"MindFusion Spreadsheet for WinForms: BeginInit\">BeginInit<\/a> and <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?M_MindFusion_Spreadsheet_Worksheet_EndInit_0.htm\" title=\"MindFusion Spreadsheet for WinForms: EndInit\">EndInit<\/a> .<\/p>\n<p>The data for the spreadsheet is randomly generated. We have a list with the names of the students and we generate random scores in biology and chemistry. Some students have no marks in one of the majors.<\/p>\n<pre>string[] candidates = new string[] { \"James Smith\", \"Mary Johnson\", \"Patricia Brown\", \"Jennifer Jones\", \"Robert Garcia\", \"John Davis\", \"Linda Rodriguez\", \"Elizabeth Martinez\", \"Michael Fernandez\", \"Barbara Lopez\", \"William Wilson\", \"Susan Anderson\", \"Jessica Gonzalez\", \"David Thomas\", \"Richard Taylor\", \"Joseph Moore\", \"Sarah Jackson\", \"Karen Marten\", \"Nancy Lee\", \"Sandra Perez\", \"Steven Harris\", \"Paul Clark\", \"Andrew Ramirez\", \"Emily Lewis\", \"Donald Robinson\", \"Michelle Walker\", \"Betty Young\", \"Matthew Wright\"};\n\t\t\t\nRandom rand = new Random();\n\nfor (int i = 0; i &lt; candidates.Length; i++)\n{\n\tactiveSheet.Cells[0, i + 2].Data = candidates[i];\n\n\tif (i % 4 != 0)\n\t\tactiveSheet.Cells[1, i + 2].Data = rand.NextDouble() * 65;\n\tif ((i+1) % 6 != 0)\n\t\tactiveSheet.Cells[3, i + 2].Data = rand.Next(101);\n\tif ((i + 2) % 5 != 0)\n\t\tactiveSheet.Cells[4, i + 2].Data = rand.NextDouble() * 72;\n\tif ((i + 4) % 6 != 0)\n\t\tactiveSheet.Cells[6, i + 2].Data = rand.Next(101);\n}<\/pre>\n<p><strong>II. The Heading and Cell Headers<\/strong><\/p>\n<p>We make the row with the heading 35 points tall and merge 8 cells that will span above the eight columns with the data.<\/p>\n<pre>activeSheet.Rows[0].Height = 35;\nvar heading = activeSheet.CellRanges[\"A1:H1\"];\nheading.Merge();<\/pre>\n<p>In order to merge cells you need to call the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?M_MindFusion_Spreadsheet_CellRange_Merge_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Merge\">Merge<\/a> method on a <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Worksheet_CellRanges_0.htm\" title=\"MindFusion Spreadsheet for WinForms: CellRanges\">CellRanges<\/a> instance. Next we get the merged cell that represents the heading and apply some formatting on it. But before that, we set the heading text:<\/p>\n<pre>var headingCell = activeSheet.Cells[\"A1\"];\nheadingCell.Data = \"STUDENT TEST RESULTS\";\n\nvar headingStyle = headingCell.Style;\nheadingStyle.HorizontalAlignment = HorizontalAlignment.Center;\nheadingStyle.VerticalAlignment = VerticalAlignment.Middle;\nheadingStyle.Background = new MindFusion.Drawing.SolidBrush(Color.FromArgb(45, 52, 72));\nheadingStyle.FontSize = 14;\nheadingStyle.FontBold = true;\nheadingStyle.TextColor = Color.FromArgb(228, 223, 221);<\/pre>\n<p>Formatting and styling of cells is done through the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Row_Style_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Style\">Style<\/a> class. Each UI unit in the spreadsheet: <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_Cell_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: Cell\">Cell<\/a>, <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Worksheet_CellRanges_0.htm\" title=\"MindFusion Spreadsheet for WinForms: CellRanges\">CellRanges<\/a>, <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_Column.htm\" title=\"MindFusion Spreadsheet for WinForms: Column\">Column<\/a>, <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Mapping_Row_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: Row\">Row<\/a> etc. has a <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Row_Style_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Style\">Style<\/a> property. Customizing the appearance of the visual is done through this property.<\/p>\n<p>We initialize an array with the labels of the columns:<\/p>\n<pre>string[] cellHeaders = new string[] { \"Name\", \"Biology Olympics\\nPoints, Max 65\", \"Biology Olympics\\n Percents\", \"Biology Competition\\nPoints, Max 100\", \"Chemistry Olympics\\nPoints, Max 72\", \"Chemistry Olympics\\nPercents\", \"Chemistry Competition\\nPoints, Max 100\", \"Total Points\\nMax Biology + Max Chemnistry\" };\n\nfor (int i = 0; i &lt; cellHeaders.Length; i++)\t\n\tactiveSheet.Cells[i, 1].Data = cellHeaders[i];<\/pre>\n<p>The content of a cell depends on the value of its <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_CellData.htm\" title=\"MindFusion Spreadsheet for WinForms: Data\">Data<\/a> property. The rest of the formatting is done through the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_IStyle.htm\" title=\"MindFusion Spreadsheet for WinForms: Style\">Style<\/a> field the same way we set it for the heading.<\/p>\n<p><strong>III. Data and Formulas<\/strong><\/p>\n<p>We generate the points for the competition and Olympics in biology randomly:<\/p>\n<pre>string[] candidates = new string[] { \"James Smith\", \"Mary Johnson\", \"Patricia Brown\", \"Jennifer Jones\", \"Robert Garcia\", \"John Davis\", \"Linda Rodriguez\", \"Elizabeth Martinez\", \"Michael Fernandez\", \"Barbara Lopez\", \"William Wilson\", \"Susan Anderson\", \"Jessica Gonzalez\", \"David Thomas\", \"Richard Taylor\", \"Joseph Moore\", \"Sarah Jackson\", \"Karen Marten\", \"Nancy Lee\", \"Sandra Perez\", \"Steven Harris\", \"Paul Clark\", \"Andrew Ramirez\", \"Emily Lewis\", \"Donald Robinson\", \"Michelle Walker\", \"Betty Young\", \"Matthew Wright\"};\n\t\t\t\nRandom rand = new Random();\n\nfor (int i = 0; i &lt; candidates.Length; i++)\n{\n\tactiveSheet.Cells[0, i + 2].Data = candidates[i];\n\n\tif (i % 4 != 0)\n\t\tactiveSheet.Cells[1, i + 2].Data = rand.NextDouble() * 65;\n\tif ((i+1) % 6 != 0)\n\t\tactiveSheet.Cells[3, i + 2].Data = rand.Next(101);\n\tif ((i + 2) % 5 != 0)\n\t       activeSheet.Cells[4, i + 2].Data = rand.NextDouble() * 72;\n        if ((i + 4) % 6 != 0)\n\t\tactiveSheet.Cells[6, i + 2].Data = rand.Next(101);\n}<\/pre>\n<p>Our criteria dictates that the points from the Olympics need to be converted to percents in order to match the scale of the points from the competition. We do this by applying formula and formatting. First, we need to recalculate the points as a percentage of the maximum number of points. This is 65 for the first Olympics. The fraction we receive is less than 1 but the formatting of the number as a percent (&#8220;P2&#8221;) compensates this:<\/p>\n<pre>for (int i = 3; i &lt; 3 + candidates.Length; i++)\n{\n\tstring row = i.ToString();\n\tactiveSheet.Cells[\"C\" + row].Data = string.Format(\"=B{0}\/65\", row);\n\tactiveSheet.Cells[\"C\" + row].Style.Format = \"P2\";\n}<\/pre>\n<p>In order to calculate the final score of the candidate, we apply a formula that uses the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Workbook_CalculationMaxIterations_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Max\">Max<\/a> function:<\/p>\n<pre>activeSheet.Cells[\"H\" + row].Data = string.Format(\"=Max(C{0} * 100, D{0}) + Max(F{0}*100, G{0})\", row);<\/pre>\n<p>With that our data entry and calculation is done and we need just to implement data validation.<\/p>\n<p><strong>IV. Data Validation<\/strong><\/p>\n<p>Data validation steps in to ensure that whenever data is edited or new data is added, the values are correct. It is implemented through the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Column_Validation_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Validation\">Validation<\/a> class and its numerous properties. Just like <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Row_Style_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Style,\">Style,<\/a> <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_ValidationType.htm\" title=\"MindFusion Spreadsheet for WinForms: Validation\">Validation<\/a> is exposed as a member on every UI element of the data grid in a spreadsheet: <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_Cell_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: Cell\">Cell<\/a> , <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_Column.htm\" title=\"MindFusion Spreadsheet for WinForms: Column\">Column<\/a> , <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Mapping_Row_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: Row\">Row<\/a> etc. The <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_Cell_Validation_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Validation\">Validation<\/a> class has various properties for spcifying the restrictions. First, there are various types of validation &#8211; data, text, length, date time values etc. In our case we want the entry to be decimal values. We use the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_IConditionalFormat_First_0.htm\" title=\"MindFusion Spreadsheet for WinForms: First\">First<\/a> and <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_IConditionalFormat_Second_0.htm\" title=\"MindFusion Spreadsheet for WinForms: Second\">Second<\/a> properties of the <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_IValidation_Members.htm\" title=\"MindFusion Spreadsheet for WinForms: Validation\">Validation<\/a> class to indicate which is the interval that is valid for cell data. We also use additional properties like <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_IValidation_InputMessage_0.htm\" title=\"MindFusion Spreadsheet for WinForms: InputMessage\">InputMessage<\/a> , <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_IValidation_ErrorMessage_0.htm\" title=\"MindFusion Spreadsheet for WinForms: ErrorMessage\">ErrorMessage<\/a> , <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?P_MindFusion_Spreadsheet_IValidation_ErrorTitle_0.htm\" title=\"MindFusion Spreadsheet for WinForms: ErrorTitle\">ErrorTitle<\/a> and other to inform the user why data entry has failed.<\/p>\n<pre>var bioOlympicsCells = activeSheet.CellRanges[\"B3:B30\"];\nbioOlympicsCells.Validation.Type = ValidationType.Decimal;\nbioOlympicsCells.Validation.First = \"0\";\nbioOlympicsCells.Validation.Second = \"65\";\nbioOlympicsCells.Validation.Operator = ComparisonOperator.Between;\nbioOlympicsCells.Validation.AllowBlankCells = true;\nbioOlympicsCells.Validation.ShowInputMessage = true;\nbioOlympicsCells.Validation.InputMessage = \"Points mus be max 65.\";\nbioOlympicsCells.Validation.ShowError = true;\nbioOlympicsCells.Validation.ErrorTitle = \"Invalid input.\";\nbioOlympicsCells.Validation.ErrorMessage = \"Points must be non-negative and 65 or less.\";<\/pre>\n<p>Here is how the warning look like:<\/p>\n<p><a href=\"https:\/\/mindfusion.dev\/samples\/winforms\/spreadsheet\/validation.png\" alt=\"Data Validation in Spreadsheet for WinForms\"><img decoding=\"async\" src=\"https:\/\/mindfusion.dev\/samples\/winforms\/spreadsheet\/validation.png\" title=\"Data Validation in Spreadsheet for WinForms\"><\/a><\/p>\n<p><strong>V. Conditional Formatting<\/strong><\/p>\n<p>Conditional formats are a powerful way to mark cells that answer given criteria. In our case we would like to mark the cell, which provides the mark in biology or chemistry. Since we take the maximum value from the points from the Olympics or the competition, we will mark the cell, whose value we take.<\/p>\n<pre>\/\/ Set some conditional formats\nfor (int c = 2; c &lt; candidates.Length + 3; c++)\n{\n\t\/* set a background for the cell of biology competition\n\tthe condition is that its value is higher than the one\n\tfrom the biology olympics *\/\n\tvar biologyCompetitionCell = activeSheet.Cells[3, c];\n\n\tvar cf1 = biologyCompetitionCell.Style.ConditionalFormats.Add();\n\tcf1.Type = ConditionalFormatType.CellValue;\n\tcf1.Operator = ComparisonOperator.GreaterThan;\n\n\tvar biologyPercent = 0.0;\n\tif (activeSheet.Cells[1, c].Data != null)\n\t{\n\t\tif (Double.TryParse(activeSheet.Cells[1, c].Data.ToString(), out biologyPercent))\n\t\t\tcf1.Second = (biologyPercent\/65 * 100).ToString();\n\t}\n\telse\n\t\tcf1.Second = \"0\";\t\n\n\tcf1.Style.Background = new MindFusion.Drawing.SolidBrush(Color.FromArgb(255, 229, 238, 221));\n}<\/pre>\n<p>The <a href=\"https:\/\/www.mindfusion.dev\/onlinehelp\/winformspack\/index.htm?T_MindFusion_Spreadsheet_ConditionalFormatType.htm\" title=\"MindFusion Spreadsheet for WinForms: ConditionalFormatType\">ConditionalFormatType<\/a> property specifies if the criteria will be based on the cell value or a formula. We will compare the cell value to the value of the neighbouring cell to decide which is bigger: the mark from the olympics or the competition. We need to convert the value of the olympics to percents so that the comparison is done on similar values.<br \/>\nWe repeat the conditional formatting on the next column, which guarantees that the cell with the bigger value will be highlighted With that our sample is finished. You can download the final project, together with all libraries used from this link:<\/p>\n<p align=\"center\"><a href=\"https:\/\/mindfusion.dev\/samples\/winforms\/spreadsheet\/StudentTest.zip\">Spreadsheet for WinForms Sample Project with Data Validation, Conditional Formats and Formulas<\/a><\/p>\n<p><i>About MindFusion Spreadsheet for WinForms:<\/i> This is a powerful spreadsheet control written in pure C# that provides Excel-like features into any .NET application. The library is easy to integrate and customize. The control boasts a powerful calculation engine, validation, filter and sort of data, functions, various data types and more. Each spreadsheet can contain various charts, hyperlinks, images and differently styles cells. Appearance customization is done through multiple properties, which can be applied on cells, rows, columns, cell ranges etc. The control supports import and export into various formats and is optimized for speed and performance of large data sets. Learn more at <a href=\"https:\/\/mindfusion.dev\/spreadsheet-winforms.html\" title=\"Spreadsheet for WinForms\">https:\/\/mindfusion.dev\/spreadsheet-winforms.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post we will demonstrate how the developer can use validation, formulas and conditional formatting on cells in a spreadsheet. We will build a sample spreadsheet that calculates application score for students. The final mark is the sum &hellip; <a href=\"https:\/\/mindfusion.dev\/blog\/data-validation-formulas-and-conditional-formatting-in-spreadsheet-for-winforms\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[74,163],"tags":[672,176,670,671],"class_list":["post-2693","post","type-post","status-publish","format-standard","hentry","category-sample-code","category-spreadsheet","tag-calculation-engine","tag-data-validation","tag-spreadsheet-formulas","tag-spreadsheet-library"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p3RlKs-Hr","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/posts\/2693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/comments?post=2693"}],"version-history":[{"count":4,"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/posts\/2693\/revisions"}],"predecessor-version":[{"id":2697,"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/posts\/2693\/revisions\/2697"}],"wp:attachment":[{"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/media?parent=2693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/categories?post=2693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mindfusion.dev\/blog\/wp-json\/wp\/v2\/tags?post=2693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}