<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic TexElementObject: Error in setting text in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644500#M50240</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm trying to write a script to update a TextElement object in a batch of MXDs. (I know there's a similar discussion going on right now but I didn't see anything relevant to my issue.) So far I've been getting the error:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;RuntimeError: TextElementObject: Error in setting text&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;import os
import arcpy

# Loop over MXDs
root = r'H:\myDir'

for file in os.listdir(root):
 print 'Working on ' + file
 path = os.path.join(root, file)
 mxd = arcpy.mapping.MapDocument(path)
 text_elms = arcpy.mapping.ListLayoutElements(mxd, 'TEXT_ELEMENT')
 
 the_text_elm = None

 # Loop over text elements to find subtitle
 for text_elm in text_elms:
&amp;nbsp; i = text_elm.text.find('Archit')
&amp;nbsp; if i &amp;gt; -1:
&amp;nbsp;&amp;nbsp; the_text_elm = text_elm
&amp;nbsp;&amp;nbsp; break
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Update
 if the_text_elm:
&amp;nbsp; i = the_text_elm.text.find('Archit')
&amp;nbsp; new_text = the_text_elm.text[:i] + 'Historic Resources'
&amp;nbsp; the_text_elm.text =&amp;nbsp; new_text
&amp;nbsp; mxd.save()
 else:
&amp;nbsp; print 'Did not update'&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've checked every step of the routine up until the text is set and everything looks fine (no unexpected nulls). Can anyone see anything wrong with what I'm doing here?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 19 Aug 2013 18:21:34 GMT</pubDate>
    <dc:creator>RobertMartin2</dc:creator>
    <dc:date>2013-08-19T18:21:34Z</dc:date>
    <item>
      <title>TexElementObject: Error in setting text</title>
      <link>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644500#M50240</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm trying to write a script to update a TextElement object in a batch of MXDs. (I know there's a similar discussion going on right now but I didn't see anything relevant to my issue.) So far I've been getting the error:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;RuntimeError: TextElementObject: Error in setting text&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;import os
import arcpy

# Loop over MXDs
root = r'H:\myDir'

for file in os.listdir(root):
 print 'Working on ' + file
 path = os.path.join(root, file)
 mxd = arcpy.mapping.MapDocument(path)
 text_elms = arcpy.mapping.ListLayoutElements(mxd, 'TEXT_ELEMENT')
 
 the_text_elm = None

 # Loop over text elements to find subtitle
 for text_elm in text_elms:
&amp;nbsp; i = text_elm.text.find('Archit')
&amp;nbsp; if i &amp;gt; -1:
&amp;nbsp;&amp;nbsp; the_text_elm = text_elm
&amp;nbsp;&amp;nbsp; break
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Update
 if the_text_elm:
&amp;nbsp; i = the_text_elm.text.find('Archit')
&amp;nbsp; new_text = the_text_elm.text[:i] + 'Historic Resources'
&amp;nbsp; the_text_elm.text =&amp;nbsp; new_text
&amp;nbsp; mxd.save()
 else:
&amp;nbsp; print 'Did not update'&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've checked every step of the routine up until the text is set and everything looks fine (no unexpected nulls). Can anyone see anything wrong with what I'm doing here?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 19 Aug 2013 18:21:34 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644500#M50240</guid>
      <dc:creator>RobertMartin2</dc:creator>
      <dc:date>2013-08-19T18:21:34Z</dc:date>
    </item>
    <item>
      <title>Re: TexElementObject: Error in setting text</title>
      <link>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644501#M50241</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Your code runs without error for me. What version of ArcGIS are you using?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 19 Aug 2013 18:52:34 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644501#M50241</guid>
      <dc:creator>MathewCoyle</dc:creator>
      <dc:date>2013-08-19T18:52:34Z</dc:date>
    </item>
    <item>
      <title>Re: TexElementObject: Error in setting text</title>
      <link>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644502#M50242</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm on 10 SP5. Interesting that it runs fine for you - now I'm wondering if it's something with the MXD.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 19 Aug 2013 19:07:38 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644502#M50242</guid>
      <dc:creator>RobertMartin2</dc:creator>
      <dc:date>2013-08-19T19:07:38Z</dc:date>
    </item>
    <item>
      <title>Re: TexElementObject: Error in setting text</title>
      <link>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644503#M50243</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Sure enough, I skipped the MXD that was throwing the error and it went on fine. I ran the MXD Doctor on it and still no dice, but one manual edit won't kill me &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 19 Aug 2013 19:29:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644503#M50243</guid>
      <dc:creator>RobertMartin2</dc:creator>
      <dc:date>2013-08-19T19:29:36Z</dc:date>
    </item>
    <item>
      <title>Re: TexElementObject: Error in setting text</title>
      <link>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644504#M50244</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;It does not run for me at all. In fact, I set root = r'D:' and it gives me .prj files located several folders deep. In no way can I make it report the mxd's in the listed directory.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If I start it out like this it will get the list of mxd's:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
arcpy.env.overwriteOutput = True 

text_elms = []
the_text_elm = None

start = "D:\\"
for root, dirs, files in os.walk(start):
&amp;nbsp;&amp;nbsp;&amp;nbsp; for mapDoc in files:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if mapDoc.endswith(".mxd"):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'Working on ',mapDoc
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path = os.path.abspath(os.path.join(root,mapDoc))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocument(path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text_elms = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "Archit")[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the_text_elm = None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the_text_elm = text_elm

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;have you typed print os.listdir(root) and make sure that it only reports mxd files? as mine crashes trying to set the mxd = somefileotherthan mxd (the first file in my directory) the above code "fixes" that.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you are changing for ALL text elements with name = "Archit", you don't need to iterate through the list&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In fact, you assign it to text_elms, then try to iterate through that as a list.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Can't be done as text_elms is a list of TextElement objects, and is not iterable as is not a list ().&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then, in this part, do whatever if's you need, but you have assigned the text element to text_elms variable (not the_text_elm), so that is the one you want to update:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
 if the_text_elm:
&amp;nbsp; i = the_text_elm.text.find('Archit')
&amp;nbsp; new_text = the_text_elm.text[:i] + 'Historic Resources'
&amp;nbsp; text_elms.text =&amp;nbsp; new_text
&amp;nbsp; mxd.save()

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is modified code that is working for me, you should be able to extract what you need:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

import os
import arcpy


# Overwrite pre-existing files
arcpy.env.overwriteOutput = True

# Loop over MXDs
folder = r'H:\myDir'
arcpy.env.workspace = folder
arcpy.env.overwriteOutput = True 

for root, dirs, files in os.walk(start):
&amp;nbsp;&amp;nbsp;&amp;nbsp; for mapDoc in files:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if mapDoc.endswith(".mxd"):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'Working on ',mapDoc
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path = os.path.abspath(os.path.join(root,mapDoc))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocument(path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "Archit"):&amp;nbsp;&amp;nbsp; # this keeps it from erroring out if the text element "Archit" doesn't exist...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text_elms = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "Archit")[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_text = "test"&amp;nbsp; + ' Historic Resources'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text_elms.text =&amp;nbsp; new_text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.save()
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Keep in mind this will walk through all sub-folders as well.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope this gets you on the right track,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;R_&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 16:43:51 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/texelementobject-error-in-setting-text/m-p/644504#M50244</guid>
      <dc:creator>RhettZufelt</dc:creator>
      <dc:date>2021-12-12T16:43:51Z</dc:date>
    </item>
  </channel>
</rss>

