C#. Считать exel или access
От: Drakon2517  
Дата: 06.09.07 18:50
Оценка:
Я начинающий. Суть проблемы в следующем. Нужно Считать инфу с exel файла сделать необходимые расчеты, используя данную инфу, и записать расчеты в другую таблицу...
Возможно ли такое? Если невозможно счиатать из exel, как подключить или импортировать access? Как записать и в какую лучше таблицу, sql в c# или опять в access (exel)(если возможно)?

Пожалуйста, если можно, поподробнее, и приведите код, отрывки кода, чтобы хотя бы понятно было куда копать...

Спасибо.

07.09.07 20:12: Перенесено модератором из 'C/C++' — Odi$$ey
Re: C#. Считать exel или access
От: Пётр Седов Россия  
Дата: 07.09.07 00:18
Оценка:
Здравствуйте, Drakon2517.
Обязательно на C#? (Форум-то про C/C++.) Могу привести пример на Delphi, там очень удобно работать с IDispatch. Например, есть Excel-таблица (.xls-файл) с двумя колонками чисел. Нужно вычислить сумму и разность каждой пары и записать результаты в новый файл. На Delphi это можно сделать так:
uses
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  Excel: Variant; // хранит указатель на IDispatch
  InputSheet: Variant;
  NumRows: Integer;
  OutputBook: Variant;
  OutputSheet: Variant;
  RowIndex: Integer;
  x, y: Double; // вещественные числа (floating point, двойная точность)
begin
  Excel := CreateOleObject('Excel.Application'); // Excel должен быть установлен на компьютере
  Excel.Visible := True; // удобно во время разработки; можно убрать
  Excel.Workbooks.Open('C:\Data\Input.xls');
  InputSheet := Excel.Workbooks[1].Worksheets[1];
  OutputBook := Excel.Workbooks.Add;
  OutputSheet := OutputBook.Worksheets[1];
  NumRows := InputSheet.UsedRange.Rows.Count;
  for RowIndex := 1 to NumRows do
  begin
    x := InputSheet.Cells[RowIndex, 1];
    y := InputSheet.Cells[RowIndex, 2];
    OutputSheet.Cells[RowIndex, 1] := x + y;
    OutputSheet.Cells[RowIndex, 2] := x - y;
  end;
  Excel.DisplayAlerts := False;
  OutputBook.SaveAs('C:\Data\Output.xls');
  Excel.Quit;
end;

Код устанавливает свойство DisplayAlerts в False. Это нужно чтобы Excel молча (без вопрошающего message box-а) записал новый файл поверх старого файла с таким же именем. В Excel-ной справке по программированию написано:

DisplayAlerts Property

Remarks

When using the SaveAs method for workbooks to overwrite an existing file, the 'Overwrite' alert has a default of 'No', while the 'Yes' response is selected by Excel when the DisplayAlerts property is set equal to True.

Также можете посмотреть экспорт в Excel на C++
Автор: Пётр Седов
Дата: 26.05.07
.
Пётр Седов (ушёл с RSDN)
Re[2]: C#. Считать exel или access
От: Drakon2517  
Дата: 07.09.07 06:49
Оценка:
2Пётр Седов

Извиняюсь, если создал тему не в том разделе (А где надо, не нашел, в ".NET"?)...

Спасибо. Но все же надо в с#. Может есть какие ссылки, которые помогут в данном вопросе...
Re[3]: C#. Считать exel или access
От: Пётр Седов Россия  
Дата: 07.09.07 12:42
Оценка:
Здравствуйте, Drakon2517, Вы писали:

D>Извиняюсь, если создал тему не в том разделе (А где надо, не нашел, в ".NET"?)...

Думаю да, форум «.NET» подошёл бы лучше. Ещё есть форум «COM/DCOM/ActiveX», но он вялый.

D>Спасибо. Но все же надо в с#. Может есть какие ссылки, которые помогут в данном вопросе...

1. Статья «Взаимодействие Microsoft Excel с приложениями .NET — позднее связывание»
Автор(ы): Гасанов Ровшан Закариевич
Дата: 17.11.2005
Статья рассказывает о динамическом взаимодействии с Excel посредством OLE Automation и рефлексии.
Требуется знание С#.
, автор: Ровшан Гасанов.
2. И вообще раздел «MS Office».
Пётр Седов (ушёл с RSDN)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.