Format Text with leading apostrophe - formatting

Need to format the header row of my file to be formatted as that when you view the cell in the Excel spreadsheet it shows as HEADER but when you click that cell in the formula bar it shows 'HEADER.
I've tried seemingly just about everything with no luck. Whatever i try displays it in the cell as 'HEADER. However if I double click that cell in Excel it autoformats the way I want and strips the apostrophe out of the cell and leaves it in the formula bar.
And excel does that as well in a new cell where I type 'WHATEVER it will just display WHATEVER in the cell and still display 'WHATEVER in the formula bar.
How can I do this so it's already displayed that way when I create my Excel file with phpExcel?
This is how I'm inserting the values right now.
$objPHPExcel
->getActiveSheet()
->setCellValueExplicit(
$currentColumn.$currentRow,
$data,
PHPExcel_Cell_DataType::TYPE_STRING
);
$data would just be a string preceded by an apostrophe.

This isn't actually a feature that PHPExcel supports (incredibly, nobody has ever asked for it before), though you could modify the code to support it by adding a quotePrefix attribute to the cell style (with appropriate getter and setter), and then modifying the writer to write a quotePrefix="1" attribute to the xf record when it writes the style to the styles.xml file (for Excel2007)
EDIT
Might need a bit of tweaking, but should be fairly straightforward
Classes/PHPExcel/Style.php
add a new attribute of $_quotePrefix (type Boolean, default false) and provide getter setter methods for it.
Classes/Reader/Excel2007.php
somewhere between lines 500 and 533, test for the quotePrefix xf attribute value; and add a call to $objStyle (defined in line 577) to call the quotePrefix setter if the xf attribute value was "1".
Classes/Writer/Excel2007/Style.php
Modify the xf writer (around line 399) to write a quotePrefix attribute with a value of "1" if the $pStyle quotePrefix property is true

Related

Using formatted text from Word table to Publisher

I'm trying (and failing) to fill out a text box (TextFrame) in Publisher using a macro from content in a Word table. I'm trying to do something along the lines of:
With doc.Pages(1).shapes(1)
.GroupItems.Item(8).TextFrame.TextRange = table.Cell(2, 3).Range.FormattedText
End With
The source text from table has a bunch of font formatting that I need in the text box but it won't seem to be able to copy over the formatting and I just get the plain text. Any ideas on how to get this working properly?
Edit: It seems like TextFrame can't accept formatted text at all. Is there any way around this?
In Word TextFrame.TextRange returns a range which has a FormattedText property. The usage for that would be:
.GroupItems.Item(8).TextFrame.TextRange.FormattedText = table.Cell(2, 3).Range.FormattedText
In your code you haven't specified which property of the TextRange you want to assign the formatted text to. This means it will be assigned to the default property, Text, which is just a string and cannot contain any formatting.
Golden Rule: never rely on default properties, always specify the
property you want to use.
Given that you appear to be taking a value from Word into Publisher you should be looking at the documentation for VBA in Publisher which shows you that the TextRange object in Publisher does not have a FormattedText property, so you cannot take formatting across using this method.

Access Macro - Was textbox changed from default value?

I have an Access form with textboxes that contain some default text. The users are required to replace the text with words of their own, so I wrote a macro to confirm that (before proceeding to the next record) the text boxes no longer contain the default text. (It gives user a warning plus some other tasks, which is why I'm not using built-in Validation rules.)
The macro contains this sequence:
SetLocalVar
Name: booDetailDefault
Expression = [Forms]![frmChangeReq]![txtProblem].[Text]=[Forms]![frmChangeReq]![txtProblem].[DefaultValue]
The idea is if ...[Text] is the same as ...[DefaultValue], then booDetailDefault would be TRUE, and if not, FALSE.
However, what I do get is "Type Mismatch". I would think that Text and DefaultValue would be the same type.
Can you tell why I got this error?
Is there any way to display the Text and DefaultValue values so I can see why Access thinks they're different?
Is there a better way to see if the text boxes have been changed?
EDIT: The default text is set in the Property Sheet for the textbox. I've been running it manually, not tying it to an event yet, until I get it working.
I used Text instead of Value because that's what was available in the Macro Builder, but just in case I tried changing it to Value. It works, although I have to tell the expression to expect quotation marks around half of it:
[Forms]![frmChangeReq]![txtProblem].[DefaultValue]="""" & [Forms]![frmChangeReq]![txtProblem].[Value] & """"

Range.Text VBA, set data into variable

I'm trying to get formatted data from an excel cell. This cell can contains special symbols like &,',",<,>, LF (End of Line). All this text content will be set inside of a xml structure. For this reason I have to get all this text and parse all special symbols and transformed to a character entity
(& &apos; " <....)
To do this, first I have to load the data from cell in my code, it looks like:
Set beforeTransformation = Sheets(langId).Range("A46").Text
As official documentation says:
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-text-property-excel
It's a read only property, so when I execute the VBA macro, next error is outputted,
Compile error: Object required
The question is, which is the best way to get data from a cell and set it into a variable for future transformation?
Thank you.

automating word 2010 to generate docs

the webapp was already done on office2007 and i need to convert it so it'll work in office2010.
i was able to convert the header generator part of the code but i have problem with the body of the doc itself. the code copy the data from a "data" doc and paste it into the generated doc.
appword.activewindow.activepane.view.seekview = 0
'set appsel1 = appword.activewindow.selection
set appsel1 = appword.window(filepath).selection -that is the original one
appdoc1.bookmarks("b1").select
appword.selection.insertafter("some text")
appsel1.endkey(6) -the code stops here
appword.selection.insertafter("some other text")
the iexplorer debuger says ERROR:appsel1 object required. and when i view its data using the iexplorer debugger its data is "empty" instead of "{...}"
can anyone tell me what i'm doing wrong
if you need more of the code tell me.
From MSDN
After this method is applied, the selection expands to include the new
text.
If you use this method with a selection that refers to an entire
paragraph, the text is inserted after the ending paragraph mark (the
text will appear at the beginning of the next paragraph). To insert
text at the end of a paragraph, determine the ending point and
subtract 1 from this location (the paragraph mark is one character).
However, if the selection ends with a paragraph mark that also happens
to be the end of the document, Microsoft Word inserts the text before
the final paragraph mark rather than creating a new paragraph at the
end of the document.
Also, if the selection is a bookmark, Word inserts the specified
text but does not extend the selection or the bookmark to include the
new text.
So I suspect that you still have no selected text.
I wonder if you can do a Selection Collapse(wdCollapseStart) but that's just a thought.

Make Word's automatic spell-checking pick up dictionary changes

In MS Word it's possible to add words to a custom dictionary so they're recognized. If a word is not recognized, Word automatically puts a red squiggly line underneath it. If you add that word to the custom dictionary, this line disappears. What I'd like to do is perform this process automatically via a macro. It appears that one has to manually open the dictionary file and write the new word, as there is no method on the Word Dictionary object to add words to a given dictionary. This is no problem, except that Word doesn't automatically pick up the new word and remove the red squiggly lines underneath the newly-added word. I've even tried clearing the custom dictionaries and adding them back in, but it doesn't seem to reload the dictionary until you manually run a spell check. Sample code for this follows:
Dim x As Dictionary
Dim fname As String
fname = "C:\Users\me\AppData\Roaming\Microsoft\UProof\md.dic"
' code to add word to dictionary goes here
With CustomDictionaries
.ClearAll
.Add fname
.ActiveCustomDictionary = CustomDictionaries.Item(fname)
End With
Is there any way to make Word recognize the newly added word(s) in a custom dictionary without running the interactive spell check? It does this silently if you manually add words, but I can't seem to replicate this behavior in VBA. I'd like the red lines to go away automatically just like they do when you manually add words.
I haven't exactly solved the problem, but I think I figured out a work around. You can get a collection of Range objects which represent spelling errors using ActiveDocument.SpellingErrors. I'm going to search this collection for text matching the word I've added to the dictionary, and then set .NoProofing = True on the object. This appears to make the red lines go away, and having added the new word to the dictionary will prevent them from coming back the next time I open the document. I haven't fully tested this approach, but it looks promising.
EDIT
This approach is flawed, as additional instances of the word which are entered during the same session will have the red squigglies underneath them because they haven't been explicitly ignored and the spell check isn't yet using the updated dictionary. If you just pull up the custom dictionary dialog manually and click OK, something happens in the background to re-read the dictionary. I just can't figure out how to do this in code.