Главная страница
    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.02 c
1-43070
Alibaba
2002-02-27 10:44
2002.03.14
TRegValue


1-43036
dens
2002-02-26 13:44
2002.03.14
Можно ли в ячейку StringGrid поместить не текстовую информацию, а объект, например spinedit?


1-43084
Voldemar
2002-02-27 02:45
2002.03.14
TImage обалдел или я?


1-43077
POMAH
2002-02-27 13:04
2002.03.14
Большие числа с плавающей точкой


14-43170
oblom
2002-01-25 01:14
2002.03.14
Глючит HDD





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