{"id":2219,"date":"2025-05-08T08:22:33","date_gmt":"2025-05-08T08:22:33","guid":{"rendered":"https:\/\/techtrendfeed.com\/?p=2219"},"modified":"2025-05-08T08:22:34","modified_gmt":"2025-05-08T08:22:34","slug":"producing-knowledge-dictionary-for-excel-recordsdata-utilizing-openpyxl-and-ai-brokers","status":"publish","type":"post","link":"https:\/\/techtrendfeed.com\/?p=2219","title":{"rendered":"Producing Knowledge Dictionary for Excel Recordsdata Utilizing OpenPyxl and AI Brokers"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<h2 class=\"wp-block-heading\"\/>\n<p class=\"wp-block-paragraph\">Each firm I labored for till as we speak, there it was: the resilient MS Excel. <\/p>\n<p class=\"wp-block-paragraph\">Excel was first launched in 1985 and has remained robust till as we speak. It has survived the rise of relational databases, the evolution of many programming languages, the Web with its infinite variety of on-line purposes, and at last, it&#8217;s also surviving the period of the AI.<\/p>\n<p class=\"wp-block-paragraph\">Phew!<\/p>\n<p class=\"wp-block-paragraph\">Do you will have any doubts about how resilient Excel is? I don\u2019t.<\/p>\n<p class=\"wp-block-paragraph\">I feel the explanation for that&#8217;s its <em>practicality to begin and manipulate a doc shortly<\/em>. Take into consideration this example: we\u2019re at work, in a gathering, and abruptly the management shares a CSV file and asks for a fast calculation or a number of calculated numbers. Now, the choices are:<\/p>\n<p class=\"wp-block-paragraph\">1. Open an IDE (or a pocket book) and begin coding like loopy to generate a easy matplotlib graphic;<\/p>\n<p class=\"wp-block-paragraph\">2. Open Energy BI, import the info, and begin making a report with dynamic graphics.<\/p>\n<p class=\"wp-block-paragraph\">3. Open the CSV in Excel, write a few formulation, and create a graphic.<\/p>\n<p class=\"wp-block-paragraph\">I can\u2019t communicate for you, however many occasions I&#8217;m going for possibility 3. Particularly as a result of Excel information are suitable with every part, simply shareable, and beginner-friendly.<\/p>\n<p class=\"wp-block-paragraph\">I&#8217;m saying all of this as an Introduction to make my level that I don\u2019t suppose that Excel information are going away anytime quickly, even with the quick improvement of AI. Many will love that, many will hate that. <\/p>\n<p class=\"wp-block-paragraph\">So, my motion right here was to leverage AI to make Excel information higher documented. One of many major complaints of knowledge groups about Excel is the dearth of finest practices and reproducibility, on condition that the names of the columns can have any names and information varieties, however zero documentation.<\/p>\n<p class=\"wp-block-paragraph\">So, I&#8217;ve created an AI Agent that reads the Excel file and creates this small documentation. Right here is the way it works:<\/p>\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">The Excel file is transformed to CSV and fed into the Massive Language Mannequin (LLM).<\/li>\n<li class=\"wp-block-list-item\">The AI Agent generates the info dictionary with column data (variable title, information sort, description).<\/li>\n<li class=\"wp-block-list-item\">The information dictionary will get added as feedback to the Excel file\u2019s header.<\/li>\n<li class=\"wp-block-list-item\">Output file saved with feedback.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">Okay. Fingers-on now. Let\u2019s get that completed on this tutorial.<\/p>\n<h2 class=\"wp-block-heading\">Code<\/h2>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/contributor.insightmediagroup.io\/wp-content\/uploads\/2025\/05\/a_holographic_spreadsheet_that_is_receiving_text-1024x562.jpeg\" alt=\"\" class=\"wp-image-603564\"\/><figcaption class=\"wp-element-caption\">Let\u2019s code! | Picture generated by AI. Meta Llama, 2025. https:\/\/meta.ai<\/figcaption><\/figure>\n<p class=\"wp-block-paragraph\">We are going to start by organising a digital surroundings. Create a <code>venv<\/code> with the device of your alternative, akin to Poetry, Python Venv, Anaconda, or UV. I actually like UV, as it&#8217;s the quickest and the only, for my part. When you&#8217;ve got UV put in <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.astral.sh\/uv\/getting-started\/installation\/\">[5]<\/a>, open a terminal and create your <code>venv<\/code>.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\">uv init data-docs\ncd data-docs\nuv venv\nuv add streamlit openpyxl pandas agno mcp google-genai<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Now, allow us to import the required modules. This undertaking was created with Python 3.12.1, however I imagine Python 3.9 or increased may do the trick already. We are going to use:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>Agno<\/strong>: for the AI Agent administration<\/li>\n<li class=\"wp-block-list-item\"><strong>OpenPyxl<\/strong>: for the manipulation of Excel information<\/li>\n<li class=\"wp-block-list-item\"><strong>Streamlit<\/strong>: for the front-end interface.<\/li>\n<li class=\"wp-block-list-item\">Pandas, OS, JSON, Dedent and Google Genai as help modules.<\/li>\n<\/ul>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nimport os\nimport json\nimport streamlit as st\nfrom textwrap import dedent\n\nfrom agno.agent import Agent\nfrom agno.fashions.google import Gemini\nfrom agno.instruments.file import FileTools\n\nfrom openpyxl import load_workbook\nfrom openpyxl.feedback import Remark\nimport pandas as pd<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Nice. The following step is creating the capabilities we\u2019ll must deal with the Excel information and to create the AI Agent. <\/p>\n<p class=\"wp-block-paragraph\">Discover that every one the capabilities have detailed <strong>docstrings<\/strong>. That is intentional as a result of LLMs use docstrings to know what a given perform does and determine whether or not to make use of it or not as a device.<\/p>\n<p class=\"wp-block-paragraph\">So, for those who\u2019re utilizing Python capabilities as Instruments for an AI Agent, be sure that to make use of detailed docstrings. These days, with free copilots akin to Windsurf <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/windsurf.com\/vscode_tutorial\">[6]<\/a> it&#8217;s even simpler to create them.<\/p>\n<h3 class=\"wp-block-heading\">Changing the file to CSV<\/h3>\n<p class=\"wp-block-paragraph\">This perform will:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Take the Excel file and browse solely the primary 10 rows. That is sufficient for us to ship to the LLM. Doing that, we&#8217;re additionally stopping sending too many tokens as enter and making this agent too costly. <\/li>\n<li class=\"wp-block-list-item\">Save the file as CSV to make use of as enter for the AI Agent. The CSV format is simpler for the mannequin to absorb, as it&#8217;s a bunch of textual content separated by commas. And we all know LLMs shine working with textual content.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">Right here is the perform.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">def convert_to_csv(file_path:str):\n   \"\"\"\n    Use this device to transform the excel file to CSV.\n\n    * file_path: Path to the Excel file to be transformed\n    \"\"\"\n   # Load the file  \n   df = pd.read_excel(file_path).head(10)\n\n   # Convert to CSV\n   st.write(\"Changing to CSV... :leftwards_arrow_with_hook:\")\n   return df.to_csv('temp.csv', index=False)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Let\u2019s transfer on.<\/p>\n<h3 class=\"wp-block-heading\">Creating the Agent<\/h3>\n<p class=\"wp-block-paragraph\">The following perform creates the AI agent. I&#8217;m utilizing <code>Agno<\/code> [1], as it is extremely versatile and simple to make use of. I additionally selected the mannequin <code>Gemini 2.0 Flash<\/code>. Through the take a look at section, this was the best-performing mannequin producing the info docs. To make use of it, you will want an API Key from Google. Don\u2019t neglect to get one right here <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">[7]<\/a>.<\/p>\n<p class=\"wp-block-paragraph\">The perform:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Receives the CSV output from the earlier perform.<\/li>\n<li class=\"wp-block-list-item\">Passes by the AI Agent, which generates the info dictionary with column title, description, and information sort.<\/li>\n<li class=\"wp-block-list-item\">Discover that the <code>description<\/code> argument is the immediate for the agent.  Make it detailed and exact.<\/li>\n<li class=\"wp-block-list-item\">The information dictionary will probably be saved as a <code>JSON<\/code> file utilizing a device referred to as <code>FileTools<\/code> that may learn and write information.<\/li>\n<li class=\"wp-block-list-item\">I&#8217;ve arrange <code>retries=2<\/code> so we will work round any error on a primary attempt. <\/li>\n<\/ul>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">def create_agent(apy_key):\n    agent = Agent(\n        mannequin=Gemini(id=\"gemini-2.0-flash\", api_key=apy_key),\n        description= dedent(\"\"\"\n                            You might be an agent that reads the temp.csv dataset introduced to you and \n                            based mostly on the title and information sort of every column header, decide the next data:\n                            - The information forms of every column\n                            - The outline of every column\n                            - The primary column numer is 0\n\n                            Utilizing the FileTools supplied, create a knowledge dictionary in JSON format that features the under data:\n                            {<colnumber>: {ColName: <colname>, DataType: <datatype>, Description: <description>}}\n\n                            If you're unable to find out the info sort or description of a column, return 'N\/A' for that column for the lacking values.\n                            \n                            \"\"\"),\n        instruments=[ FileTools(read_files=True, save_files=True) ],\n        retries=2,\n        show_tool_calls=True\n        )\n\n    return agent\n<\/description><\/datatype><\/colname><\/colnumber><\/code><\/pre>\n<p class=\"wp-block-paragraph\">Okay. Now we want one other perform to save lots of the info dictionary to the file. <\/p>\n<h3 class=\"wp-block-heading\">Including Knowledge Dictionary to the File\u2019s Header<\/h3>\n<p class=\"wp-block-paragraph\">That is the final perform to be created. It can:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Get the info dictionary <code>json<\/code> from the earlier step and the unique Excel file.<\/li>\n<li class=\"wp-block-list-item\">Add the info dictionary to the file\u2019s header as feedback.<\/li>\n<li class=\"wp-block-list-item\">Save the output file.<\/li>\n<li class=\"wp-block-list-item\">As soon as the file is saved, it shows a obtain button for the person to get the modified file.<\/li>\n<\/ul>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">def add_comments_to_header(file_path:str, data_dict:dict=\"data_dict.json\"):\n    \"\"\"\n    Use this device so as to add the info dictionary {data_dict.json} as feedback to the header of an Excel file and save the output file.\n\n    The perform takes the Excel file path as argument and provides the {data_dict.json} as feedback to every cell\n    Begin counting from column 0\n    within the first row of the Excel file, utilizing the next format:    \n        * Column Quantity: <column_number>\n        * Column Identify: <column_name>\n        * Knowledge Kind: <data_type>\n        * Description: <description>\n\n    Parameters\n    ----------\n    * file_path : str\n        The trail to the Excel file to be processed\n    * data_dict : dict\n        The information dictionary containing the column quantity, column title, information sort, description, and variety of null values\n\n    \"\"\"\n    \n    # Load the info dictionary\n    data_dict = json.load(open(data_dict))\n\n    # Load the workbook\n    wb = load_workbook(file_path)\n\n    # Get the energetic worksheet\n    ws = wb.energetic\n\n    # Iterate over every column within the first row (header)\n    for n, col in enumerate(ws.iter_cols(min_row=1, max_row=1)):\n        for header_cell in col:\n            header_cell.remark = Remark(dedent(f\"\"\"\n                              ColName: {data_dict[str(n)]['ColName']}, \n                              DataType: {data_dict[str(n)]['DataType']},\n                              Description: {data_dict[str(n)]['Description']}\n    \"\"\"),'AI Agent')\n\n    # Save the workbook\n    st.write(\"Saving File... :floppy_disk:\")\n    wb.save('output.xlsx')\n\n    # Create a obtain button\n    with open('output.xlsx', 'rb') as f:\n        st.download_button(\n            label=\"Obtain output.xlsx\",\n            information=f,\n            file_name='output.xlsx',\n            mime='utility\/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n        )\n<\/description><\/data_type><\/column_name><\/column_number><\/code><\/pre>\n<p class=\"wp-block-paragraph\">Okay. The following step is to attach all of this collectively on a Streamlit front-end script.<\/p>\n<h3 class=\"wp-block-heading\">Streamlit Entrance-Finish<\/h3>\n<p class=\"wp-block-paragraph\">On this step, I might have created a special file for the front-end and imported the capabilities in there. However I made a decision to make use of the identical file, so let\u2019s begin with the well-known: <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">if __name__ == \"__main__\":<\/code><\/pre>\n<p class=\"wp-block-paragraph\">First, a few strains to configure the web page and messages displayed within the Net Utility. We are going to use the content material <code>centered<\/code> on the web page, and there may be some details about how the App works.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Config web page Streamlit\n    st.set_page_config(format=\"centered\", \n                       page_title=\"Knowledge Docs\", \n                       page_icon=\":paperclip:\",\n                       initial_sidebar_state=\"expanded\")\n    \n    # Title\n    st.title(\"Knowledge Docs :paperclip:\")\n    st.subheader(\"Generate a knowledge dictionary on your Excel file.\")\n    st.caption(\"1. Enter your Gemini API key and the trail of the Excel file on the sidebar.\")\n    st.caption(\"2. Run the agent.\")\n    st.caption(\"3. The agent will generate a knowledge dictionary and add it as feedback to the header of the Excel file.\")\n    st.caption(\"ColName: <colname> | DataType: <datatype> | Description: <description>\")\n    \n    st.divider()<\/description><\/datatype><\/colname><\/code><\/pre>\n<p class=\"wp-block-paragraph\">Subsequent, we\u2019ll arrange the sidebar, the place the person can enter their API Key from Google and choose a <code>.xlsx<\/code> file to be modified.<\/p>\n<p class=\"wp-block-paragraph\">There&#8217;s a button to run the applying, one other to reset the app state, and a progress bar. Nothing too fancy.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">with st.sidebar:\n        # Enter your API key\n        st.caption(\"Enter your API key and the trail of the Excel file.\")\n        api_key = st.text_input(\"API key: \", placeholder=\"Google Gemini API key\", sort=\"password\")\n        \n        # Add file\n        input_file = st.file_uploader(\"File add\", \n                                       sort='xlsx')\n        \n\n        # Run the agent\n        agent_run = st.button(\"Run\")\n\n        # progress bar\n        progress_bar = st.empty()\n        progress_bar.progress(0, textual content=\"Initializing...\")\n\n        st.divider()\n\n        # Reset session state\n        if st.button(\"Reset Session\"):\n            st.session_state.clear()\n            st.rerun()<\/code><\/pre>\n<p class=\"wp-block-paragraph\">As soon as the <strong>run<\/strong> button is clicked, it triggers the remainder of the code to run the Agent. Right here is the sequence of steps carried out:<\/p>\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">The primary perform is known as to remodel the file to CSV<\/li>\n<li class=\"wp-block-list-item\">The progress is registered on the progress bar.<\/li>\n<li class=\"wp-block-list-item\">The Agent is created.<\/li>\n<li class=\"wp-block-list-item\">Progress bar up to date.<\/li>\n<li class=\"wp-block-list-item\">A immediate is fed into the agent to learn the <code>temp.csv<\/code> file, create the info dictionary, and save the output to <code>data_dictionary.json<\/code>.<\/li>\n<li class=\"wp-block-list-item\">The information dictionary is printed on the display, so the person can see what was generated whereas it\u2019s being saved to the Excel file.<\/li>\n<li class=\"wp-block-list-item\">The Excel file is modified and saved.<\/li>\n<\/ol>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Create the agent\n    if agent_run:\n        # Convert Excel file to CSV\n        convert_to_csv(input_file)\n\n        # Register progress\n        progress_bar.progress(15, textual content=\"Processing CSV...\")\n\n        # Create the agent\n        agent = create_agent(api_key)\n\n        # Begin the script\n        st.write(\"Operating Agent... :runner:\")\n\n        # Register progress\n        progress_bar.progress(50, textual content=\"AI Agent is operating...\")\n\n        # Run the agent    \n        agent.print_response(dedent(f\"\"\"\n                                1. Use FileTools to learn the temp.csv as enter to create the info dictionary for the columns within the dataset. \n                                2. Utilizing the FileTools device, save the info dictionary to a file named 'data_dict.json'.\n                                \n                                \"\"\"),\n                        markdown=True)\n\n        # Print the info dictionary\n        st.write(\"Producing Knowledge Dictionary... :page_facing_up:\")\n        with open('data_dict.json', 'r') as f:\n            data_dict = json.load(f)\n            st.json(data_dict, expanded=False)\n\n        # Add feedback to header\n        add_comments_to_header(input_file, 'data_dict.json')\n\n        # Take away non permanent information\n        st.write(\"Eradicating non permanent information... :wastebasket:\")\n        os.take away('temp.csv')\n        os.take away('data_dict.json')    \n    \n    # If file exists, present success message\n    if os.path.exists('output.xlsx'):\n        st.success(\"Carried out! :white_check_mark:\")\n        os.take away('output.xlsx')\n\n    # Progress bar finish\n    progress_bar.progress(100, textual content=\"Carried out!\")<\/code><\/pre>\n<p class=\"wp-block-paragraph\">That\u2019s it. Here&#8217;s a demonstration of the agent in motion.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/contributor.insightmediagroup.io\/wp-content\/uploads\/2025\/05\/output.gif\" alt=\"\" class=\"wp-image-603563\"\/><figcaption class=\"wp-element-caption\">Knowledge Docs added to your Excel File. Picture by the writer.<\/figcaption><\/figure>\n<p class=\"wp-block-paragraph\">Stunning end result!<\/p>\n<h3 class=\"wp-block-heading\">Strive It<\/h3>\n<p class=\"wp-block-paragraph\">You possibly can attempt the deployed app right here: <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/excel-datadocs.streamlit.app\/\">https:\/\/excel-datadocs.streamlit.app\/<\/a><\/p>\n<h2 class=\"wp-block-heading\">Earlier than You Go<\/h2>\n<p class=\"wp-block-paragraph\">In my humble opinion, Excel information aren&#8217;t going away anytime quickly. Loving or hating them, we\u2019ll have to stay with them for some time.<\/p>\n<p class=\"wp-block-paragraph\">Excel information are versatile, simple to deal with and share, thus they&#8217;re nonetheless very helpful for the routine <em>ad-hoc<\/em> duties at work.<\/p>\n<p class=\"wp-block-paragraph\">Nonetheless, now we will leverage AI to assist us deal with these information and make them higher. <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/towardsdatascience.com\/tag\/artificial-intelligence\/\" title=\"Artificial Intelligence\">Synthetic Intelligence<\/a> is touching so many factors of our lives. The routine and instruments at work are solely one other one.<\/p>\n<p class=\"wp-block-paragraph\">Let\u2019s reap the benefits of AI and work smarter daily!<\/p>\n<p class=\"wp-block-paragraph\">Should you preferred this content material, discover extra of my work in my web site and GitHub, shared under.<\/p>\n<h3 class=\"wp-block-heading\">GitHub Repository<\/h3>\n<p class=\"wp-block-paragraph\">Right here is the GitHub Repository for this undertaking.<\/p>\n<p class=\"wp-block-paragraph\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/gurezende\/Data-Dictionary-GenAI\">https:\/\/github.com\/gurezende\/Knowledge-Dictionary-GenAI<\/a><\/p>\n<h3 class=\"wp-block-heading\">Discover Me<\/h3>\n<p class=\"wp-block-paragraph\">You could find extra about my work on my web site.<\/p>\n<p class=\"wp-block-paragraph\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/gustavorsantos.me\">https:\/\/gustavorsantos.me<\/a><\/p>\n<h2 class=\"wp-block-heading\">References<\/h2>\n<p class=\"wp-block-paragraph\">[1. Agno Docs] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.agno.com\/introduction\/agents\">https:\/\/docs.agno.com\/introduction\/brokers<\/a><\/p>\n<p class=\"wp-block-paragraph\">[2. <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/towardsdatascience.com\/tag\/openpyxl\/\" title=\"Openpyxl\">Openpyxl<\/a> Docs] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/openpyxl.readthedocs.io\/en\/stable\/index.html\">https:\/\/openpyxl.readthedocs.io\/en\/secure\/index.html<\/a><\/p>\n<p class=\"wp-block-paragraph\">[3. Streamlit Docs] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.streamlit.io\/\">https:\/\/docs.streamlit.io\/<\/a><\/p>\n<p class=\"wp-block-paragraph\">[4. Data-Docs Web App] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/excel-datadocs.streamlit.app\/\">https:\/\/excel-datadocs.streamlit.app\/<\/a><\/p>\n<p class=\"wp-block-paragraph\">[5. Installing UV] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.astral.sh\/uv\/getting-started\/installation\/\">https:\/\/docs.astral.sh\/uv\/getting-started\/set up\/<\/a><\/p>\n<p class=\"wp-block-paragraph\">[6. Windsurf Coding Copilot] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/windsurf.com\/vscode_tutorial\">https:\/\/windsurf.com\/vscode_tutorial<\/a><\/p>\n<p class=\"wp-block-paragraph\">[7. Google Gemini API Key] <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/ai.google.dev\/gemini-api\/docs\/api-key\">https:\/\/ai.google.dev\/gemini-api\/docs\/api-key<\/a><\/p>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Each firm I labored for till as we speak, there it was: the resilient MS Excel. Excel was first launched in 1985 and has remained robust till as we speak. It has survived the rise of relational databases, the evolution of many programming languages, the Web with its infinite variety of on-line purposes, and at [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2221,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[617,157,2186,2187,129,2019,2188],"class_list":["post-2219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-machine-learning","tag-agents","tag-data","tag-dictionary","tag-excel","tag-files","tag-generating","tag-openpyxl"],"_links":{"self":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/2219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2219"}],"version-history":[{"count":1,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/2219\/revisions"}],"predecessor-version":[{"id":2220,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/2219\/revisions\/2220"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/media\/2221"}],"wp:attachment":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 69d9690a190636c2e0989534. Config Timestamp: 2026-04-10 21:18:02 UTC, Cached Timestamp: 2026-05-06 19:43:14 UTC -->