public static string GetCustomProperty(this Excel.Workbook book, string propertyName) { //string strResult = string.Empty; //Office.DocumentProperties pros = (Office.DocumentProperties)book.CustomDocumentProperties; //strResult = GetCustomProperty(pros, propertyName); //if (!string.IsNullOrEmpty(strResult)) //{ // return strResult; //} //int index = 1; //while (true) //{ // string pName = propertyName + index++.ToString(); // string pValue = GetCustomProperty(pros, pName); // if (string.IsNullOrEmpty(pValue)) // { // break; // } // else // { // strResult += pValue; // } //} //return strResult; string strResult = string.Empty; var bookType = book.GetType(); var pros = bookType.InvokeMember("CustomDocumentProperties", System.Reflection.BindingFlags.GetProperty, null, book, null); var propertiesType = pros.GetType(); var enumerator = (IEnumerator)propertiesType.InvokeMember("GetEnumerator", System.Reflection.BindingFlags.InvokeMethod, null, pros, null); Func<string, string> getPropertyValue = new Func<string, string>(s => { string strValue = string.Empty; enumerator.Reset(); while (enumerator.MoveNext()) { var p = enumerator.Current; var name = p.GetType().InvokeMember("Name", System.Reflection.BindingFlags.GetProperty, null, p, null); if (name != null && name.ToString().Equals(propertyName)) { return (string)p.GetType().InvokeMember("Value", System.Reflection.BindingFlags.GetProperty, null, p, null); } } return strValue; }); strResult = getPropertyValue(propertyName); if (!string.IsNullOrEmpty(strResult)) { return strResult; } int index = 1; while (true) { string pName = propertyName + index++.ToString(); string pValue = getPropertyValue(pName); if (string.IsNullOrEmpty(pValue)) { break; } else { strResult += pValue; } } return strResult; } 注掉的代码,在多线程操作中会出错
时间: 2024-10-07 14:50:21