försöker använda Dsofile för att ändra egenskaper på ett worddokument. Man måste trigga "Uppdatera fält" för att de skall uppdateras i Word-dokumentet. Detta sker inte automatiskt när dokumentet öppnas. Det görs manuellt med Select All och sedan F9. att jag inte avänder Word interop beror på att dom inte fungerar speciellt bra ihop med asp.net. OK, från ASP.NET... inte så bra med word Interop då eftersom den kör mot en Word-session (.exe) som kan påverkas av andra. Trist. Har nu gjort en riktigt ful lösning som iof fungerar, än så länge.Hjälp med Dsofile.
Jag lyckas skriva till dokumentets property men värdet syns inte i dokumentet förän jag manuellt uppdaterar fältet i worddokumentet.
Någon som har som några ideer?
DSOFile.OleDocumentPropertiesClass oPropCls = new DSOFile.OleDocumentPropertiesClass();
oPropCls.Open(@"C:\Inetpub\wwwroot\Docs\temp\HMS-00080 Rev 7.doc",false,DSOFile.dsoFileOpenOptions.dsoOptionOnlyOpenOLEFiles);
DSOFile.CustomProperties customProperties = oPropCls.CustomProperties;
object oValue = "mj";
bool bPropFound = false;
int i = 0;
foreach( DSOFile.CustomProperty customProp in oPropCls.CustomProperties )
{
if(customProp.Type != DSOFile.dsoFilePropertyType.dsoPropertyTypeUnknown)
{
if(customProp.Name == "DokumentKod")
{
customProp.set_Value(ref oValue);
bPropFound = true;
}
}
i++;
}
oPropCls.Save();
oPropCls.Close(false);
oPropCls = null;Sv: Hjälp med Dsofile.
Testa själv genom att:
1. göra ett dokument med ett fält som beror på ett Custom Property.
2. Stäng dokumentet.
3. Ändra egenskapen i Explorer (Properties -> Custom), Klicka på ditt fält, ändra värde, klicka Modify.
4. Öppna dokumentet. Fältet har inte uppdaterats.
5. Högerklicka på fältet -> Update field eller klicka i fältet -> F9. Fältet uppdateras.
Mao: skall du ändra egenskaper i Word-dokument så kan du lika gärna använda Words objektmodell eftersom du ändå måste trigga en uppdatering av fälten i dokumentet.
/AndreasSv:Hjälp med Dsofile.
Men det du säger är detta måste göras manuellt, och i så fall får jag tänka om.
Har du några tips är dom varmt välkomna.
En fullösning som jag testat lite är att köra via ActiveX.
typ:
wdApp = new ActiveXObject("Word.Application");
...
wdDoc.Sections.Item(1).Headers.Item(1).Range.Fields.Update();
Men då mina dokument ligger i en MsSql server vet jag inte hur jag öppnar dessa via activeX -objeket.Sv: Hjälp med Dsofile.
Att använda via "ActiveX" som du säger är samma sak som att köra via Word Interop eftersom även interop går via COM-interfacet.
Accessa Word-dokument som ligger i MS SQl Server kan bara göras genom att man laddar ner en kopia till disk som man öppnar, manipulerar och sedan sparar i databasen igen, tror jag.
Har du kontroll över Word-mallen som används så skulle du kunna lägga in et macro som körs vid OnLoad som uppdaterar alla fält i dokumentet.
Många sporadiska ideer men ingen riktig lösning... (tyvärr)
/AndreasSv:Hjälp med Dsofile.
1. Läser ut min fil från db, sparar denna fysikt på disk.
2. Öppnar filen via javscript och activeX.
3. Ändrar properties i word dokumentet via javascript och vbscript.
4. när användaren har stängt dokumentet städar jag bort den sparade filen.