westpine |
Отправлено: 26.07.2004, 20:48 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Всем привет. Весь вопрос в сабже. Единственный путь который я знаю, это доставать поячеечно текст из таблицы и sprintfom писать на диск. Но скорее всего есть более современный метод И желательно сразу в Excel документ
Отредактировано westpine — 26/07/2004, 21:51 |
|
PeroManiak |
Отправлено: 26.07.2004, 22:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 71
|
westpine, у тебя какие-то вопросы странные...
Если в Excell, не парься, читай доку про ексель, это лежит на каждом шагу. Ищущий, да найдет
Отредактировано PeroManiak — 26/07/2004, 23:56
|
|
Gedeon |
Отправлено: 27.07.2004, 08:07 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Еще посмотри TAdvStrGrid
|
|
MDM |
Отправлено: 27.07.2004, 14:08 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 23
|
QUOTE (westpine @ 26/07/2004, 21:50) | Всем привет. Весь вопрос в сабже. Единственный путь который я знаю, это доставать поячеечно текст из таблицы и sprintfom писать на диск. Но скорее всего есть более современный метод И желательно сразу в Excel документ |
Можешь читать и потом писать в файл построчно:
StringGrid1->Rows[i]->Text;
А вот в Excel:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList* data = new TStringList();
String line;
TDateTime tm1, tm2;
tm1 = Time();
//вставим в Excel...
XL = CreateOleObject("Excel.Application.8");
XL.OlePropertySet("Visible", CheckBox1->Checked);
v0 = XL.OlePropertyGet("Workbooks");
v0.OleProcedure("Add");
v1 = v0.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);
//добавляем строки в которых слова разделены Tab-ом, Excel — поймет...
for (int i = 0; i < StringGrid1->RowCount; i++) {
line = StringGrid1->Cells[0][i];
for (int j = 1; j < StringGrid1->ColCount; j++) {
line = line + "\t" + StringGrid1->Cells[j][i];
}
data->Add(line);
}
//в Clipboard...
Clipboard()->AsText = data->Text;
v1.OlePropertyGet("Range", "A1:A1").OleProcedure("Select"); //например начиная с этой ячейки...
v1.OleProcedure("Paste");
Clipboard()->Clear();
XL.OlePropertySet("DisplayAlerts",false);
XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", ChangeFileExt(Application->ExeName, ".xls"));
XL.OleProcedure("Quit");
tm2 = Time();
ShowMessage("done with " + TimeToStr(tm2 — tm1));
delete data;
}
или так:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TDateTime tm1, tm2;
String Range;
Variant A(OPENARRAY(int, (0, StringGrid1->ColCount)), varVariant);
tm1 = Time();
XL = CreateOleObject("Excel.Application.8");
XL.OlePropertySet("Visible", CheckBox1->Checked);
v0 = XL.OlePropertyGet("Workbooks");
v0.OleProcedure("Add");
v1 = v0.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);
for (int i = 0; i < StringGrid1->RowCount; i++) {
for (int j = 0; j < StringGrid1->ColCount; j++) {
A.PutElement(StringGrid1->Cells[j][i],j);
}
Range.printf("A%d:J%d", i+1, i+1);
v1.OlePropertyGet("Range", Range.c_str()).OlePropertySet("Value", A);
}
XL.OlePropertySet("DisplayAlerts",false);
XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", ChangeFileExt(Application->ExeName, ".xls"));
XL.OleProcedure("Quit");
tm2 = Time();
ShowMessage("done with " + TimeToStr(tm2 — tm1));
}
Project1 здесь:
|
|
westpine |
Отправлено: 28.07.2004, 00:31 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
И снова всем спасибо! ЗАРАБОТАЛО! До чего же путевая вещь — форум |
|
|