Recent

Author Topic: Conversion de caracteres al crear documento de word  (Read 4824 times)

esdonis

  • Jr. Member
  • **
  • Posts: 61
Conversion de caracteres al crear documento de word
« on: September 12, 2018, 09:22:52 pm »
Estoy tratando de crear un documento de Word, pero este no visualiza de forma carecta si pongo caracteres acentuados o si le paso algún valor desde un campo de texto al documento.

Como podría solventar este error de conversión de tipos?

el código que utilizo es el siguiente:

procedure Tflconv.cmdlistClick(Sender: TObject);

var
  libro: OLEVariant;

begin
  try
      libro := CreateOleObject('Word.Application');
  except
    on e:exception do begin
        Application.MessageBox('Error al crear el documento. Primeramente debe instalar el Office.', pchar(Self.Caption), MB_ICONINFORMATION);
      exit;
    end;
  end;
  libro.WordBasic.FileNew;
  libro.Selection.TypeText('ACTA DE CONCILIACIÓN DE PAGO');
  libro.Selection.TypeParagraph;
  libro.Selection.MoveUp(5, 1);
  libro.ActiveWindow.ActivePane.LargeScroll(-1);
  libro.Selection.EndKey(5, 1);
  libro.Selection.ParagraphFormat.Alignment := 1;
  libro.Selection.Font.Bold := 9999998;
  libro.Selection.Font.Italic := 9999998;
  libro.Selection.Font.Size := 16;
  libro.Selection.MoveDown(5, 3);
  libro.Selection.TypeParagraph;
  libro.Selection.TypeText(Text:='DE UNA PARTE: ' +  txtnombre.Text + ' con domicilio legal en ' + txtdir.Text + '. Registrada con el código No ' + txtent.Text);
  libro.Selection.TypeParagraph;
  libro.Visible:=true;
end;

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Conversion de caracteres al crear documento de word
« Reply #1 on: September 12, 2018, 09:34:55 pm »
Prueba usando:
    libro.Selection.TypeText(UTF8Decode('cadena'));

Posiblemente Word (¿qué versión?) esté esperando una WideString o una AnsiString(CP_ACP) pero Lazarus le envíe una cadena en UTF-8.
« Last Edit: September 12, 2018, 09:40:19 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

esdonis

  • Jr. Member
  • **
  • Posts: 61
Re: Conversion de caracteres al crear documento de word
« Reply #2 on: September 12, 2018, 09:59:18 pm »
Me produce una excepcion del tipo SIGSEGV la función UTF8Decode


esdonis

  • Jr. Member
  • **
  • Posts: 61
[Solved] Conversion de caracteres al crear documento de word
« Reply #3 on: September 12, 2018, 10:31:19 pm »
Si esperaba un WideString

Pero aun no me funciona en el caso de la O acentuada. Lo demás SI funciona

libro.Selection.TypeText(WideString('ACTA DE CONCILIACIÓN DE PAGO'));

La O acentuada no la convierte corectamente

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Conversion de caracteres al crear documento de word
« Reply #4 on: September 12, 2018, 10:42:19 pm »
Sólo por probar, declara una variable WS: WideString y haz:
Code: Pascal  [Select][+][-]
  1. [... more code ...]
  2.     WS := UTF8Decode('ACTA DE CONCILIACIÓN ...');
  3.     libro.Selection.TypeText(WS);

¿Puedes compartir la unidad donde está declarado el interface con Word? Estoy asumiendo muchas cosas que igual no son ciertas ...  :)
« Last Edit: September 12, 2018, 10:46:52 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

esdonis

  • Jr. Member
  • **
  • Posts: 61
Re: Conversion de caracteres al crear documento de word
« Reply #5 on: September 13, 2018, 01:47:40 pm »
Funciona Perfecto.

1 Millón de Gracias

Yo había probado:
libro.Selection.TypeText(WideString('ACTA DE CONCILIACIÓN DE PAGO'));
y
libro.Selection.TypeText(UTF8Decode('ACTA DE CONCILIACIÓN DE PAGO'));

Y ninguno de estos 2 casos funcionaba.

Ñuño_Martínez

  • Hero Member
  • *****
  • Posts: 1186
    • Burdjia
Re: Conversion de caracteres al crear documento de word
« Reply #6 on: September 13, 2018, 02:06:03 pm »
¿Estás usando OLE? Creía que estaba superado y ahora se usaba CORBA (o me estoy haciendo un lío con otra cosa, que yo jamás he usado OLE ni CORBA ni nada de eso) ActiveX.  ¿De veras no hay otra forma de hacerlo?

Es sólo un comentario.  Es que ver ese OLEVariant me ha chocado muchísismo.
Are you interested in game programming? Join the Pascal Game Development community!
Also visit the Game Development Portal

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Conversion de caracteres al crear documento de word
« Reply #7 on: September 13, 2018, 02:26:08 pm »
Yo había probado:
libro.Selection.TypeText(WideString('ACTA DE CONCILIACIÓN DE PAGO'));
y
libro.Selection.TypeText(UTF8Decode('ACTA DE CONCILIACIÓN DE PAGO'));

Y ninguno de estos 2 casos funcionaba.

En el primer caso es probable que sea porque estás usando un typecast; el compilador debería reconocerlo y cambiar la cadena directamente pero quizá no lo esté haciendo bien (?). En el segundo, debería funcionar sin más, pero ya se sabe :) Teniendo ambos casos en cuenta y tratando de adivinar ... ¿es posible que Selection.TypeText() no se esté portando bien cuando le pasas una constante? Lástima que no pueda probarlo a fondo.

¿Estás usando OLE? Creía que estaba superado y ahora se usaba ActiveX. [...] Es que ver ese OLEVariant me ha chocado muchísismo.

Por lo que yo sé, son dos tecnologías con diferente propósito---aunque se solapan en algunos aspectos. Y oye, si funciona bien y uno está acostumbrado ... :D
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4459
  • I like bugs.
Re: Conversion de caracteres al crear documento de word
« Reply #8 on: September 13, 2018, 02:58:29 pm »
UTF8Decode() es prácticamente nunca necesario ya.
Asigna constantes a "String" siempre y usa UnicodeString explícito cuando un API lo manda.
Mira:
 http://wiki.freepascal.org/Unicode_Support_in_Lazarus#Calling_API_functions_that_use_WideString_or_UnicodeString
Conversiónes entre String y UnicodeString son automaticos y facil para leer. No hay feo "typecast".
Mostly Lazarus trunk and FPC 3.2 on Manjaro Linux 64-bit.

 

TinyPortal © 2005-2018