Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как читать свойства нескольких документов Office? / 5 сообщений из 5, страница 1 из 1
06.12.2008, 16:34:41
    #35697830
gp
gp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать свойства нескольких документов Office?
Есть тысячи файлов Office,
нужно достать из них Title, который виден в Document Summary в проводнике Windows.

Желательно не открывать при этом файл оффисом.

Как это сделать, желательно средствами NET Framework, или на худой конец C++.

Вообще, как читать эти свойства не только для оффисных документов?
...
Рейтинг: 0 / 0
07.12.2008, 17:20:46
    #35698573
gp
gp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать свойства нескольких документов Office?
Сделал с помощью SDOFile.dll
...
Рейтинг: 0 / 0
07.12.2008, 20:18:34
    #35698699
LeCrunch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать свойства нескольких документов Office?
gp,
так , или как?
Поделись!)
...
Рейтинг: 0 / 0
07.12.2008, 21:03:45
    #35698747
gp
gp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать свойства нескольких документов Office?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
using System;
using System.IO;
using System.Text;
using DSOFile;

namespace DSOReadFileProperties
{
	class Program
	{
		delegate void VoidFunc();
		static void Main(string[] args)
		{
			if (args.Length != 2)
				Usage();
			var directoryPath = args[0];

			var filePaths = Directory.GetFiles(directoryPath, "*.docx");

			var outputFileName = args[1];
			
			OleDocumentPropertiesClass doc = null;
            
			try
			{
				using (var writer = new StreamWriter(outputFileName))
				{
					foreach (var fileName in filePaths)
					{
						doc = new OleDocumentPropertiesClass();

						if (!File.Exists(fileName))
							throw new InvalidOperationException("File does not exist");

						doc.Open(fileName, true, dsoFileOpenOptions.dsoOptionDontAutoCreate);
						
						var sb = new StringBuilder(100);
						var propertyInfos = typeof(SummaryProperties).GetProperties();
						var beginOfLine = new []{true};

						VoidFunc tabulate = delegate { if (beginOfLine[0]) beginOfLine[0] = false; else sb.Append('\t'); };

						sb.Append("fileName");
						tabulate();
						foreach (var propertyInfo in propertyInfos)
						{
							tabulate();
							sb.Append(propertyInfo.Name);
						}

						sb.Append(Environment.NewLine);

						beginOfLine[0] = true;

						sb.Append(fileName);
						foreach (var propertyInfo in propertyInfos)
						{
							var v = propertyInfo.GetValue(doc.SummaryProperties, null);
							tabulate();
							sb.Append(v);
						}

						writer.WriteLine(sb.ToString());
						writer.Flush();
					}
				}
			}
			finally
			{
				if (doc!=null)
					doc.Close(false);
			}
		}

		private static void Usage()
		{
			Console.Error.WriteLine("USAGE: DSOReadFileProperties document_directory output_file. Warning: output_file will be overriden.");
		}
	}
}

...
Рейтинг: 0 / 0
07.12.2008, 21:15:32
    #35698758
gp
gp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как читать свойства нескольких документов Office?
сори, код с ошибками
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
using System;
using System.IO;
using System.Text;
using DSOFile;

namespace DSOReadFileProperties
{
	class Program
	{
		delegate void VoidFunc();
		static void Main(string[] args)
		{
			if (args.Length != 2)
				Usage();
			var directoryPath = args[0];

			var filePaths = Directory.GetFiles(directoryPath, "*.docx");

			var outputFileName = args[1];
			
			OleDocumentPropertiesClass doc = null;
            
			try
			{
				using (var writer = new StreamWriter(outputFileName))
				{
					var sb = new StringBuilder(100);
					var propertyInfos = typeof(SummaryProperties).GetProperties();
					var beginOfLine = new[] { true };

					sb.Append("fileName");
					VoidFunc tabulate = delegate { if (beginOfLine[0]) beginOfLine[0] = false; else sb.Append('\t'); };
					tabulate();
					foreach (var propertyInfo in propertyInfos)
					{
						tabulate();
						sb.Append(propertyInfo.Name);
					}

					foreach (var fileName in filePaths)
					{
						doc = new OleDocumentPropertiesClass();

						if (!File.Exists(fileName))
							throw new InvalidOperationException("File does not exist");

						doc.Open(fileName, true, dsoFileOpenOptions.dsoOptionDontAutoCreate);
						
						sb.Append(Environment.NewLine);

						beginOfLine[0] = true;

						sb.Append(fileName);
						tabulate();
						foreach (var propertyInfo in propertyInfos)
						{
							var v = propertyInfo.GetValue(doc.SummaryProperties, null);
							tabulate();
							sb.Append(v);
						}

						doc.Close(false);
					}
					writer.WriteLine(sb.ToString());
					writer.Flush();
				}
			}
			finally
			{
				if (doc!=null)
					doc.Close(false);
			}
		}

		private static void Usage()
		{
			Console.Error.WriteLine("USAGE: DSOReadFileProperties document_directory output_file. Warning: output_file will be overriden.");
		}
	}
}

...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как читать свойства нескольких документов Office? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]