diff -r ecce96d748d4 -r 206186b29925 0.12/tracexceldownload/api.py
--- a/0.12/tracexceldownload/api.py	Thu Nov 15 09:48:16 2012 +0100
+++ b/0.12/tracexceldownload/api.py	Thu Nov 15 11:02:40 2012 +0100
@@ -159,6 +159,7 @@
                           ('[time]', style_time),
                           ('[date]', style_date),
                           ('[datetime]', style_datetime),
+                          ('[standard]', style_base),
                           ('*', style_default)):
             styles[key] = func()
             styles['%s:change' % key] = style_change(func())
diff -r ecce96d748d4 -r 206186b29925 0.12/tracexceldownload/ticket.py
--- a/0.12/tracexceldownload/ticket.py	Thu Nov 15 09:48:16 2012 +0100
+++ b/0.12/tracexceldownload/ticket.py	Thu Nov 15 11:02:40 2012 +0100
@@ -6,6 +6,7 @@
 from xlwt import Workbook, Formula
 
 from trac.core import Component, implements
+from trac.config import Option, ListOption
 from trac.mimeview.api import Context, IContentConverter
 from trac.resource import Resource, get_resource_url
 from trac.ticket.model import Ticket
@@ -33,6 +34,57 @@
 class ExcelTicketModule(Component):
 
     implements(IContentConverter)
+    
+    # config options
+    long_text_columns = ListOption(
+        'exceldownload', 'long_text_columns',
+        default=['description', 'comment'],
+        doc='query columns returning long text data that must use Excel '
+        ' standard style instead of text to be displayed correctly')
+    replace_text = ListOption(
+        'exceldownload', 'replace_text',
+        default=[],
+        doc='comma-separated list of replacement rules to replace matching '
+        'text data by replacement character(s) with re.sub (default: []). '
+        'Enclose replacement string in quotes for leading/trailing blanks. '
+        'Format: <regular expression>=><replacement text>')
+    replace_text_split_char = Option(
+        'exceldownload', 'replace_text_split_char',
+        default='=>',
+        doc='split character(s) used for separating the match expression and '
+        'the replacement character(s) (default: "=>"), configurable to avoid '
+        'conflicts with characters used in the regular expression or the '
+        'target string')
+        
+    def __init__(self):
+        replace_text = self.replace_text
+        replace_text_split_char = self.replace_text_split_char
+        # text replacement defaults to no-op
+        def _replace_text(s):
+            return s
+        if replace_text:
+            # iterate through the given rules, compile the regular expressions
+            # and remove (all) leading and trailing single or double quotes
+            try:
+                replacement_rules = [ (re.compile(exp).sub, repl.strip(""""'"""))
+                    for (exp, repl) in [ rule.split(replace_text_split_char) 
+                    for rule in replace_text ]
+                    ]
+                def _replace_text(s):
+                    for (sub, repl) in replacement_rules:
+                        s = sub(repl, s)
+                    return s 
+            except Exception, e:
+                # switch off text replacement if the rules can't be correctly
+                # interpreted, probably due to unusable config settings
+                self.log.warn(
+                    'ExcelDownloadPlugin: %s in '
+                    'ExcelTicketModule.__init__: %s', type(e), e)
+                self.log.warn(
+                    'ExcelDownloadPlugin: Unable to parse replacement '
+                    'rules - split character(s) for character replacement rule'
+                    ' correctly set?')
+        self._replace_text = _replace_text
 
     def get_supported_conversions(self):
         yield ('excel', _("Excel"), 'xls',
@@ -216,7 +268,13 @@
             width, line = writer.get_metrics(value)
             value = Formula('HYPERLINK("%s",%s)' % (url, get_literal(value)))
             return value, name, width, line
+       
+        if isinstance(value, basestring):
+            value = self._replace_text(value)
 
+        if name in self.long_text_columns:
+            return value, '[standard]', None, None
+ 
         return value, name, None, None
 
 
