Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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;



Страницы: 1 вся ветка

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

Наверх





Память: 0.46 MB
Время: 0.009 c
1-42998
Art1
2002-02-28 12:24
2002.03.14
Как работать с формами в DLL?


3-42951
af
2002-02-13 18:37
2002.03.14
Возникла проблема - не могу сортировать записи


1-43049
Murad
2002-02-26 18:33
2002.03.14
OpenGL


1-43110
DDDeN
2002-02-27 10:39
2002.03.14
Меню из ресурса


14-43137
Helen
2002-01-29 15:32
2002.03.14
SQL запрос SQL запроса компонента ADOQuery! (D5, MSSQL)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский