G>>При попытке выполнения: System.Runtime.InteropServices.COMException was unhandled G>> Message="Использован старый формат, либо библиотека имеет неверный тип. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
G>Помогите пожалуйста, проблема остается
1. There is a bug in Excel 2003 that may cause an "Old format or invalid type library" exception. The exception is thrown when the method your calling or the method called internally by the public property requires an LCID locale identifier and you're running an English version of Excel on a computer with a forreign regional setting.
The easiest way to workaround the bug is to set the CurrentCulture property of the Thread to en-US.
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
2. Позднее связывание (особенно если надо работать с различными версиями Excel).
Здравствуйте, Gerasym, Вы писали:
G>Подскажите пожалуйста кто знает:
G>Есть:
G>range = worksheet.get_Range("A1",worksheet.Cells[worksheet.UsedRange.Rows.Count,worksheet.UsedRange.Columns.Count]);
G>Я так понимаю это диапазон ячеек?
G>Как этот range запихнуть в текстовый массив?
.Value
Только если диапазон несколько ячеек, будет массив, если одна ячейка, будет просто значение. Это долбаный интеллект excel. Я тебя поздравляю, ты ступил на путь борьбы с ним. Все только начинается...
Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
Здравствуйте, Gerasym, Вы писали:
G>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
На C# управлять OLE-Automation сервером — геммор. Учи VB.NET
Здравствуйте, altarvic, Вы писали:
A>Здравствуйте, Gerasym, Вы писали:
G>>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
A>На C# управлять OLE-Automation сервером — геммор. Учи VB.NET
Здравствуйте, altarvic, Вы писали:
A>Здравствуйте, Gerasym, Вы писали:
G>>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
A>На C# управлять OLE-Automation сервером — геммор. Учи VB.NET
Стоит задача — забрать данные из файла в массив, обработать, и вернуть их в уже измененном виде.
Здравствуйте, lonli, Вы писали:
L>Здравствуйте, Gerasym, Вы писали:
L>Копай в сторону PIA ( здесь)
Не знаешь, как в этих интероп-сборках реализованы методы с кучей параметров? Через перегрузку или так и оставлены все параметры?
Вся заморочка при работе с C# как раз в этом — C# не может иметь параметров по умолчанию и не поддерживает т.н. named параметры. В этом плане те же Delphi и VB намного удобнее. Также приходится статически привязываться к этим сборкам, потому что динамически через Reflection — это вообще капец.
Здравствуйте, Gerasym, Вы писали:
G>Здравствуйте, altarvic, Вы писали:
A>>Здравствуйте, Gerasym, Вы писали:
G>>>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
A>>На C# управлять OLE-Automation сервером — геммор. Учи VB.NET
G>Стоит задача — забрать данные из файла в массив, обработать, и вернуть их в уже измененном виде.
Здравствуйте, altarvic, Вы писали:
A>Не знаешь, как в этих интероп-сборках реализованы методы с кучей параметров? Через перегрузку или так и оставлены все параметры?
Неа. Просто по работе недавно понадобилось узнавать про эти сборки, вспомнилось. Подробностей использования не знаю
Здравствуйте, Gerasym, Вы писали:
G>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
#region OPEN_WORD
try
{
a = Marshal.GetActiveObject("Word.Application") as Word.Application;
}
catch
{
a = new Word.Application();
}
doc = a.Documents.Open(ref FileName, ref tp, ref tp, ref tp, ref tp, ref tp, ref tp, ref tp,
ref tp, ref tp, ref tp, ref tp, ref tp, ref tp, ref tp, ref tp);
#endregion
Tables tbs = doc.Tables;
str = valid1(tbs);
CloseWord();
// сюда же using System.Runtime.InteropServices;
using System.Collections.Generic;
using Word;
// и
Word.Application a;
Word.Document doc;
// и string fl = FDialog();
object FileName = fl;
object tp = Type.Missing;
Может поможет по аналогу)
delfin :)
Re[2]: Вопросы по работе с Excel
От:
Аноним
Дата:
27.04.07 10:42
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:
P_A>Кажется я уже приводил этот код отсюда.
В случае использования второго метода необходимо будет освобождать все объекты связанные с работой Excel.
Иначе Excel не будет выгружаться после завершения работы функции/ программы.
Здравствуйте, Pavel_Agurov, Вы писали:
G>>Ругается Error 1 No overload for method 'Open' takes '13' arguments C:\MSVSP\Temp\WindowsApplication1\WindowsApplication1\Form1.cs 52 21 WindowsApplication1
P_A>Пример приложения. Все работает. Не уверен, может версия офиса как-то влияет?
P_A>выложил тут
Похоже, что влияет, у меня и на твое приложение так же ругается, Office 2003 Eng, SP2.
Здравствуйте, Pavel_Agurov, Вы писали:
G>>Ругается Error 1 No overload for method 'Open' takes '13' arguments C:\MSVSP\Temp\WindowsApplication1\WindowsApplication1\Form1.cs 52 21 WindowsApplication1
P_A>Пример приложения. Все работает. Не уверен, может версия офиса как-то влияет?
P_A>выложил тут
Здравствуйте, Gerasym, Вы писали:
G>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
При попытке выполнения: System.Runtime.InteropServices.COMException was unhandled
Message="Использован старый формат, либо библиотека имеет неверный тип. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
Здравствуйте, Gerasym, Вы писали:
G>Здравствуйте, Gerasym, Вы писали:
G>>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
G>Столкнулся с проблемой:
G>При попытке выполнения: System.Runtime.InteropServices.COMException was unhandled G> Message="Использован старый формат, либо библиотека имеет неверный тип. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
Здравствуйте, Andrbig, Вы писали:
G>>>При попытке выполнения: System.Runtime.InteropServices.COMException was unhandled G>>> Message="Использован старый формат, либо библиотека имеет неверный тип. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
G>>Помогите пожалуйста, проблема остается
A>1. There is a bug in Excel 2003 that may cause an "Old format or invalid type library" exception. The exception is thrown when the method your calling or the method called internally by the public property requires an LCID locale identifier and you're running an English version of Excel on a computer with a forreign regional setting. A>The easiest way to workaround the bug is to set the CurrentCulture property of the Thread to en-US. A>
A>System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
A>
A>2. Позднее связывание (особенно если надо работать с различными версиями Excel).
Здравствуйте, Andrbig, Вы писали:
A>Здравствуйте, Gerasym, Вы писали:
G>>Подскажите пожалуйста кто знает:
G>>Есть:
G>>range = worksheet.get_Range("A1",worksheet.Cells[worksheet.UsedRange.Rows.Count,worksheet.UsedRange.Columns.Count]);
G>>Я так понимаю это диапазон ячеек?
G>>Как этот range запихнуть в текстовый массив?
A>.Value
A>Только если диапазон несколько ячеек, будет массив, если одна ячейка, будет просто значение. Это долбаный интеллект excel. Я тебя поздравляю, ты ступил на путь борьбы с ним. Все только начинается...
Странно но редактор вообще не понимает .value (диапазон), понимает только .value2 (ячейка)
Здравствуйте, Gerasym, Вы писали:
G>Всем привет, на ходу учу C# (опыта практически нет), пишу приложение для обработки прайсов в Excel, застрял на процессе открытия файла, есть стринговая переменная с путем к файлу, а как открыть сам файл и забрать из него данные в массив не понимаю. В Delphi использовал OLE для этого, а тут как? Если можно, то опишите пожалуйста с примером. Поиск нужных результатов не дал.
На самом деле все примитивно. Скачиваете Primary Interop Assemblies с сайта Майкрософта. Добавляете ссылку в ваш проект. Ну а далее стандартная автоматизация — Excel.Application app = new Excel.Application() и всё такое.
Здравствуйте, Gerasym, Вы писали:
G>Здравствуйте, Andrbig, Вы писали:
A>>Здравствуйте, Gerasym, Вы писали:
G>>>Подскажите пожалуйста кто знает:
G>>>Есть:
G>>>range = worksheet.get_Range("A1",worksheet.Cells[worksheet.UsedRange.Rows.Count,worksheet.UsedRange.Columns.Count]);
G>>>Я так понимаю это диапазон ячеек?
G>>>Как этот range запихнуть в текстовый массив?
A>>.Value
A>>Только если диапазон несколько ячеек, будет массив, если одна ячейка, будет просто значение. Это долбаный интеллект excel. Я тебя поздравляю, ты ступил на путь борьбы с ним. Все только начинается...
G>Странно но редактор вообще не понимает .value (диапазон), понимает только .value2 (ячейка)
Разница между ними невелика. Используй Value2.
The only difference between this property and the Value property is that the Value2 property doesn’t use the Currency and Date data types. You can return values formatted with these data types as floating-point numbers by using the Double data type.