1

このコードに関してあなたの助けが必要です。プロパティに組み込まれている単語ドキュメントをクリアし、提供されている場合は提供された代替品に置き換えることができるコードをc#で書いています。microsftサポートWebサイト http://support.microsoft.com/kb/303296でオンラインで見つけた例に基づいて、私のコードは大丈夫で、コンパイルエラーも発生しないので動作すると思われます。しかし、結果が得られないため、私が求めていることを行っていません。私が費やした数週間が無駄に台無しになるように、誰かが代替案で私を助けたり、私のエラーを指摘したりしてくれれば、本当に感謝します。助けてくれてありがとう。以下は私のコードです。

 private void execute_Click(object sender, EventArgs e)
        {
             Word.Application wapp; 
             Word.Document dc = new Word.Document() ;
 Object bSaveChanges = false;
           string chosen_file = "";
           chosen_file = openFD.FileName;
           textBox1.Text = (chosen_file);
           var filter = Path.GetExtension(chosen_file);

           object Filename = chosen_file.ToString();
           if (filter == ".doc" || filter == ".docx")
           {
               wapp = new Word.Application();
               wapp.Visible = true;
               docword = wapp.Documents.Add(ref Filename, ref missing, ref missing, ref missing);

               object _BuiltInProperties = docword.BuiltInDocumentProperties;
                Type typeDocBuiltInProps = _BuiltInProperties.GetType();

                 removeproperty(_BuiltInProperties, typeDocBuiltInProps);// pass parameter
                 docword.Close(ref bSaveChanges, ref missing, ref missing);
                 wapp.Quit(ref bSaveChanges, ref missing, ref missing);
           }
  }

 private void removeproperty(object _BuiltInProperties, Type typeDocBuiltInProps)
        {

            string subjectprop = "Subject";
            string subjectValue = "";
            string companyprop = "Company";
            string companyvalue = txtcompany.Text;

             if (clearsubject.Checked == true)
            {
                try
                {
                    Object Subjectprop = typeDocBuiltInProps.InvokeMember("Item", BindingFlags.Default | BindingFlags.GetProperty, null, _BuiltInProperties, new object[] { "Subject" });
                    Type typeSubjectprop = Subjectprop.GetType();

                    typeSubjectprop.InvokeMember("Item", BindingFlags.Default | BindingFlags.SetProperty, null, Subjectprop, new object[] { subjectprop, subjectValue  });

                }
                catch (COMException)
                {

                }

            }

       if (resetcompany.Checked == true)
            {
                try
                {
                  Object Companyprop = typeDocBuiltInProps.InvokeMember("Item", BindingFlags.Default | BindingFlags.GetProperty, null, _BuiltInProperties, new object[] { "Company" });
                    Type typeCompanyprop = Companyprop.GetType();
                    typeCompanyprop.InvokeMember("Item",
                               BindingFlags.Default |
                               BindingFlags.SetProperty,
                               null, Companyprop,
                               new object[] { companyprop, companyvalue });


                }
                 catch (COMException)
                {

                }


}
4

2 に答える 2

2

ここにあるように、次のように名前で単語のプロパティを変更できます

void SetWordDocumentPropertyValue(Word.Document document, string propertyName, string propertyValue)
{
  object builtInProperties = document.BuiltInDocumentProperties;
  Type builtInPropertiesType = builtInProperties.GetType();
  object property = builtInPropertiesType.InvokeMember("Item", System.Reflection.BindingFlags.GetProperty, null, builtInProperties, new object[] { propertyName });
  Type propertyType = property.GetType();
  propertyType.InvokeMember("Value", BindingFlags.SetProperty, null, property, new object[] { propertyValue });
  document.UpdateSummaryProperties();
  document.Save();
}

Property names are like "Author", "Last Author", "Title", etc...

于 2013-03-01T09:25:51.910 に答える