Главная страница

Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];



Вниз

экспорт в Excel 


Koks   (2002-02-14 13:53) [0]

Уважаемые мастера!
Перегоняю данные из dataset-ов в Excel. При этом пользуюсь "прямыми" компонентами, которые генерят непосредственно файл *.xls.
Все компоненты внутренне отличаются, но внешне схожи - в зависимости от типа переменных есть 3 метода:
WriteStr(Row,Col,StringToWrite)
WriteNum(Row,Col,NumberToWrite)
WriteBool(Row,Col,BoolToWrite)

При передаче Чисел и bool-ов все OK.
А вот со строками - проблема - в Excel-е строки выглядят не в той кодировке (то есть абракадаброй).... Пытался менять свойство компонента-"экпортера" CharSet, пытался менять настройки Excel (шрифт по умолчанию и пр.) - результат тот-же.
Только один компонент все делает правильно (нашел-таки). Но в нем нельзя передавать форматирование (вообще никакое).

Подскажите, как корректно передавать строки ... может какая установка где... может какую функцию применить

У меня Excel 2000 W98SE

Заранее горя благодарностей..



[NIKEL]   (2002-02-14 14:14) [1]

я конечно не очень вьехал в суть... но может это поможет
(у меня InterBase, может у тя в настройкак драйвера СУБД с кодировкой проблемы?)

Variant app, ws, range;
app = CreateOleObject("Excel.Application"); // создаем объект Excel
app.OlePropertyGet("Workbooks").OleProcedure("Add","C:\\Мои документы\\lschet.xls");// Добавляем рабочую книгу(открываем по шаблону)
app.OlePropertySet("Visible", true);

ws = app.OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);// 1 рабочий лист
ws.OlePropertyGet("Cells").
OlePropertyGet("Item", 3, 6).
OlePropertySet("Value", Query2->FieldByName("org_const") -> AsString);//структурное подраздиление (Строка)
AnsiString fio;
fio+=Query2->FieldByName("first_name") -> AsString;
fio+=" ";
fio+=Query2->FieldByName("mid_name") -> AsString;
fio+=" ";
fio+=Query2->FieldByName("second_name") -> AsString;
ws.OlePropertyGet("Cells").
OlePropertyGet("Item", 8, 6).
OlePropertySet("Value", fio);// Фамилия Имя Отчество...
ws.OlePropertyGet("Cells").
OlePropertyGet("Item", 7, 14).
OlePropertySet("Value", Query2->FieldByName("category") -> AsInteger);//категория персонала
ws.OlePropertyGet("Cells").
OlePropertyGet("Item", 7, 16).
OlePropertySet("Value", Query2->FieldByName("tab_number") -> AsInteger);

ну и так в том же духе... (такое ощущение что я тебе ни чё нового не открыл :])



Koks   (2002-02-14 15:21) [2]

СПАСИБО! Но суть действительно не в этом.
Я НЕ использую автоматизацию. (Я с ней работать не умею, поэтому все что Вы написали для меня как японский язык). Я использую компоненты, которые генерят файл *.xls напрямую, без Excel...

Так вот, когда я пишу в файл строки через WriteStr(т.е. метод XLSExportComponent.WriteStr), а потом открываю созданный файл в Excel-е, имею псевдографику... т.е. не та кодировка.
Вопрос - где ее менять (и можно ли вообще это сделать) Может какое-то преобразование со строкой надо сделать.. Типа функции OEMtoANSI или че-еще !
НАДО СРОЧНО! КОПАТЬСЯ НЕКОГДА!
Заранее спасибо



[NIKEL]   (2002-02-14 16:58) [3]

Ну тогда посмотри на этот код, делает .xsl файл без OLE


const
CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0);
CXlsEof: array[0..1] of Word = ($0A, 00);
CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);

procedure XlsBeginStream(XlsStream: TStream; const BuildNumber: Word);
begin
CXlsBof[4] := BuildNumber;
XlsStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
end;

procedure XlsEndStream(XlsStream: TStream);
begin
XlsStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
end;

procedure XlsWriteCellRk(XlsStream: TStream; const ACol, ARow: Word;
const AValue: Integer);
var
V: Integer;
begin
CXlsRk[2] := ARow;
CXlsRk[3] := ACol;
XlsStream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));
V := (AValue shl 2) or 2;
XlsStream.WriteBuffer(V, 4);
end;

procedure XlsWriteCellNumber(XlsStream: TStream; const ACol, ARow: Word;
const AValue: Double);
begin
CXlsNumber[2] := ARow;
CXlsNumber[3] := ACol;
XlsStream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));
XlsStream.WriteBuffer(AValue, 8);
end;

procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
L: Word;
begin
L := Length(AValue);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := ARow;
CXlsLabel[3] := ACol;
CXlsLabel[5] := L;
XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
FStream: TFileStream;
I, J: Integer;
begin
FStream := TFileStream.Create("c:\e.xls", fmCreate);
try
XlsBeginStream(FStream, 0);
for I := 0 to 99 do
for J := 0 to 99 do
begin
XlsWriteCellNumber(FStream, I, J, 34.34);
// XlsWriteCellRk(FStream, I, J, 3434);
// XlsWriteCellLabel(FStream, I, J, Format("Cell: %d,%d", [I, J]));
end;
XlsEndStream(FStream);
finally
FStream.Free;
end;
end;





Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];



Наверх

   Главная страница

Top.Mail.Ru     Яндекс.Метрика













Память: 0.77 MB
Время: 0.028 c
7-43191
muh
2001-12-10 13:00
2002.03.14
рассылка через DNS


3-42980
wdr
2002-02-14 11:35
2002.03.14
Проблемы с Cyrillic


3-42974
Malder
2002-02-16 12:37
2002.03.14
Управление доступом к базе данных...


3-42960
KIR
2002-02-15 03:56
2002.03.14
Закладки


14-43182
Blackweber
2002-01-31 21:21
2002.03.14
Помогите с DVD!!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский