Создаю проект на С# Windows Application.
Добавляю Reference на Word указывая путь \Program Files\Microsoft Office\Office11\MSWORD.OLB
и на компоненты Graph.exe, указывая путь \Program Files\Microsoft Office\Office11\Graph.exe
(для MS Office 2003, для MS Office XP \Program Files\Microsoft Office\Office10\MSWORD.OLB(Graph.exe))
Где-то в начале
using System.Reflection;
Далее:
private void button1_Click(object sender, System.EventArgs e)
{
object _Missing = Missing.Value;
Word._Application App = (new Word.ApplicationClass()).Application;
Word.Document Doc = App.Documents.Add(ref _Missing, ref _Missing, ref _Missing, ref _Missing);
object ClassStrID = "MSGraph.Chart";
Graph.Chart Chart = (Graph.Chart)Doc.InlineShapes.AddOLEObject(
ref ClassStrID, ref _Missing, ref _Missing, ref _Missing, ref _Missing, ref _Missing, ref _Missing, ref _Missing).OLEFormat.Object;
Chart.Application.DataSheet.Cells.Clear();
}
В последней строке вызывает exception: "Old format or invalid type library".
Аналогичный код на Delphi7 пашет, кроме того с макросом на VBA все также нормально работает.
Юзаю Windows XP SP2, MS VS 2003, MS Office 2003. Проверял на Office XP, и без XPSP2.
Да, и проверял на другой машине на которой стоит XP (не помню правда стоял ли SP1), с MS Office XP и MS VS 2003: тоже все пашет.
Почему такое может происходить, может кто-нибудь кстати сможет на своей машине проверить?
Сорри за пост, я уже нашел в чем трабла, но думаю ВАМ будет интересно почему она возникла, т.к. возникает она и при юзании Excel и во многом другом тоже может возникнуть.
Причина в том, что региональные настройки не совпадают с EN совместимыми (или подобными). Для того, чтобы это обойти можно вызывать в "критических" к этому участках кода следующее
System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
/* код */
System.Threading.Thread.CurrentThread.CurrentCulture = ci;