2016-03-25 23 views
1

Şu anda birden çok excel dosyasının özel niteliklerini ayarlamak için C# kullanıyorum. Microsoft'tan DSOFile olarak bilinen bir ithal kitaplığı CustomProperties özelliğine yazmak için kullanıyorum. İçinde bulunduğum bir sorun, kodun Şirket ve Yıl gibi önceden yazılmış özel özellikleri olan bir excel dosyasına yazmayı denediğinde, COMException istisnasının, dosyanın zaten var olan özelliklerinin belirtildiğini göstermesi için atılması gerekir. Bu ada sahip bir alan. Tam Mesaj: "Bu isimde bir öğe koleksiyonda zaten var". Dosyaya yeniden yazabilmek için koleksiyondaki bu öğeyi silebilmek istiyorum. Örneğin, yanlışlıkla yanlış yılı yıl içinde dosyaya eklediysem, bu alanı silme ve buna yeni bir değer yazma yeteneği istiyorum. DSOFile sınıfında meta verileri kaldıran bir yöntem bulamadım. Dosya özellikleri penceresinden yapmadan bir dosyadan "program aracılığıyla" meta verileri temizlemenin bir yolu var mı?C# kullanarak Excel dosyasından meta verileri kaldırın.

Örnek Kod: Eğer Şirket veya Yazar gibi Ofisi tarafından kullanılan varsayılan özelliklerini değiştirmek isterseniz

DSOFILE.OleDocumentProperties dso = new DSOFile.OleDocumentProperties(); 
dso.Open(@"c\temp\test.xls", false, DSOFile.dsoFileOpenOptions.dsoOptionDefault); 

//add metadata 
dso.CustomProperties.Add("Company", "Sony"); 
dso.Save(); 
dso.Close(false); 
+0

mümkün mü Yani aşağıdaki iki yöntem kullanabilirsiniz? – StingyJack

+0

bu satırı 'dso.Open (" c \ temp \ test.xls ", false, DSOFile.dsoFileOpenOptions.dsoOptionDefault);' 'a değiştirerek aşağıdaki ' dso.Open (@ "c \ temp \ test.xls", false) , DSOFile.dsoFileOpenOptions.dsoOptionDefault); – MethodMan

+0

@StingyJack Evet, bu benim sorum. – Dwayne

cevap

0

, sadece SummaryProperties nesne aracılığıyla güncelleme yapabilirsiniz:

OleDocumentProperties dso = new DSOFile.OleDocumentProperties(); 
    dso.Open(@"c:\temp\test.xls", false, DSOFile.dsoFileOpenOptions.dsoOptionDefault); 

    //Update Company 
    dso.SummaryProperties.Company = "Hello World!"; 

    dso.Save(); 
    dso.Close(false); 

Not, o SummaryProperties nesnesi aracılığıyla erişebileceğiniz belgelerin varsayılan özelliklerini dso'daki CustomProperties nesnesi aracılığıyla değiştiremezsiniz. CustomProperties, Microsoft Office tarafından önceden tanıtılmış olan kullanıcılar tarafından kullanılan ek özellikler içindir. özel özelliklerini değiştirmek amacıyla


, sen CustomProperties sen foreach aracılığıyla adımlayabilirsiniz topluluğudur farkında olmak zorunda. İşte

private static void DeleteProperty(CustomProperties properties, string propertyName) 
{ 
    foreach(CustomProperty property in properties) 
    { 
     if (string.Equals(property.Name, propertyName, StringComparison.InvariantCultureIgnoreCase)) 
     { 
      property.Remove(); 
      break; 
     } 
    } 
} 

private static void UpdateProperty(CustomProperties properties, string propertyName, string newValue) 
{ 
    bool propertyFound = false; 

    foreach (CustomProperty property in properties) 
    { 
     if (string.Equals(property.Name, propertyName, StringComparison.InvariantCultureIgnoreCase)) 
     { 
      // Property found, change it 
      property.set_Value(newValue); 
      propertyFound = true; 
      break; 
     } 
    } 

    if(!propertyFound) 
    { 
     // The property with the given name was not found, so we have to add it 
     properties.Add(propertyName, newValue); 
    } 
} 

UpdateProperty nasıl kullanılacağına dair bir örnektir:: Mevcut CustomProperty değerini değiştirmek için

static void Main(string[] args) 
{ 
    OleDocumentProperties dso = new DSOFile.OleDocumentProperties(); 
    dso.Open(@"c:\temp\test.xls", false, DSOFile.dsoFileOpenOptions.dsoOptionDefault); 

    UpdateProperty(dso.CustomProperties, "Year", "2017"); 

    dso.Save(); 
    dso.Close(false); 
} 
+0

çılgın deha ve cankurtaran, çok çalıştı! – Dwayne

İlgili konular