Jag får ett mysko fel när jag skall använda mig av Word. du kan ju skriva Tack Arathon det var vad som behövdes. borde det inte se ut typ: Hej Arathorn.C# och word
Jag försöker att lägga till en spelcheck och enligt anvisning så lägger jag till en referens till Word.
Därefter enl anvisning så skulle jag...
<codesharp>
using word //här skriker VS, men om jag skriver
using Microsoft.Office.Interop.Word;//då fungerar det. Men nu till problemet...
//jag använder mig bl a av
string path = Application.StartupPath + @"\SpecialT...osv
// här får jag fel
E:\MultLanguage\MultLanguage\Form2.cs(275): 'Application' is an ambiguous reference
</code>
Detta tydligen för att Word använder sig av Application.
Hur löser jag detta?Sv: C# och word
using Word=Microsoft.Office.Interop.Word;
men då måste du referera som Word.klass istället för alla klasser som finns i Word-namespacet...
Så om du har t.ex. Document i Word namespacet måste du ändra det till Word.Document...
Det blir en slags "shortcut" till ett namespace...
Sv: C# och word
Det finns dock en irriterande sak. När man har rättstavat, och den skall stänga ner Word(som inte syns) då "hoppar" hela appen i skärmen.
Så här ser classen ut, någonting att optimera?
<codesharp>
public void fSpellCheck(RichTextBox tBox, Label lLbl)
{
int iErrorCount = 0;
Word.Application app = new Word.Application();
if (tBox.Text.Length > 0)
{
app.Visible=false;
object template=Missing.Value;
object newTemplate=Missing.Value;
object documentType=Missing.Value;
object visible=true;
object optional = Missing.Value;
Word.Document doc = app.Documents.Add(ref template,
ref newTemplate, ref documentType, ref visible);
doc.Words.First.InsertBefore (tBox.Text );
Word.ProofreadingErrors we = doc.SpellingErrors;
iErrorCount = we.Count;
doc.CheckSpelling( ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional,
ref optional, ref optional);
if (iErrorCount == 0)
lLbl.Text = "Spelling OK. No errors corrected ";
else if (iErrorCount == 1)
lLbl.Text = "Spelling OK. 1 error corrected ";
else
lLbl.Text = "Spelling OK. " + iErrorCount +
" errors corrected ";
object first=0;
object last=doc.Characters.Count -1;
tBox.Text = doc.Range(ref first, ref last).Text;
}
else
lLbl.Text = "Textbox is empty";
object saveChanges = false;
object originalFormat = Missing.Value;
object routeDocument = Missing.Value;
app.Quit(ref saveChanges, ref originalFormat, ref routeDocument);
}
</code>
Det är desutom på det sättet, att den hittar fel, rättar dem men skriver inte in dem i min richtextbox.
Vad tror du?Sv: C# och word
...
object str=tBox.Text;
doc.CheckSpelling( ref str, ref optional, ref optional,
ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional,
ref optional, ref optional);
...
Om du inte vill använda word kanske detta kan vara nåt:
http://www.codeproject.com/csharp/NetSpell.asp
Sv: C# och word
Jag har kommit tillrätta med de flesta felen nu.
Det du föreslog reulterade i ett error, kan inte hitta ordlistan, så jag behåller orginalkoden.
Just nu så finns det bara en irriterande detalj, om jag har jobbat med appen, rättstavat osv, och sedan skall stänga ner datorn, då har Word legat i bakgrunden hela tiden, och nu frågar mig, vill du spara document21 eller document33 osv.
I koden så vinns ju inskrivet
<codesharp>
object saveChanges = false;
object originalFormat = Missing.Value;
object routeDocument = Missing.Value;
app.Quit(ref saveChanges, ref originalFormat, ref routeDocument);
</code>
...men likväl så kommer det upp.
Något förslag?
I övrigt så fungerar den kanonbra.