Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

nombrar hoja en excel

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: nombrar hoja en excel Responder citando

Muchachos, he estado buscando en el foro pero no he dado con lo siguiente: necesito cambiarle el nombre una/s hoja/s de Excel, o sea cambiar el nombre predetermiando de, por ejemplo, "Hoja1".
Ahora bien, es muy probable que esto me lo respondan...pero sería interesante además saber de donde "sacan" esta información así la próxima o bien puedo darle una mano al foro yo o al menos no volver a preguntar. Estuve revisando el XLMAIN11.chm del Excel 2003 pero nada he encontrado al respecto.
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Ya que estamos en el baile...¿cómo abro un archivo de Excel con password? Se supone conozco el pass.
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola pampa.

El fichero de ayuda del excel, el XLMAIN11.chm, varia según la versión del office que tengas, la sección de "información de programación", que yo sepa y lo recalco, sólo está en las versiones developer y profesional.

Bueno, a otra cosa.

Para renombrar el nombre de una hoja de excel, y suponiendo que ya tengas la instancia de excel abierta:
Código:

//-------- Abre EXCEL
     xlApp = CreateOleObject("Excel.Application");

      //-------- OCULTO EXCEL
     xlApp.Exec(PropertySet("Visible") << false);

     //-------- crea acceso al objeto 'libro'/workbook
     Variant xlBooks = xlApp.Exec(PropertyGet("Workbooks"));

     //-------- Crea un fichero nuevo
     //---------CREA EL LIBRO CON UNA SOLA HOJA
     xlBooks.Exec(Procedure("Add") << 1);

     //-------- crea el libro de la aplicacion con una sola hoja
     Variant xlBook = xlBooks.Exec(PropertyGet("Item") << 1);

     //-------- crea acceso al objeto 'hoja'/worksheets
     Variant xlSheets = xlBook.Exec(PropertyGet("Worksheets"));

     //-------- coge la primera hoja del libro
     Variant xlSheet = xlSheets.Exec(PropertyGet("Item") << 1);

     // Dar nombre a la hoja
     xlSheet.Exec(PropertySet("Name")<< "Hoja renombrada");
     


Para guardar el fichero de excel, dandole un pass:
Código:

xlBook.Exec(Procedure("SaveAs") << "c:\\miFichero.xls" << xlExcel7  << "" << "1234");




Ahora, para habrir el fichero de excel protegido, desde builder pasando el pass del fichero:
Código:

 xlBooks.Exec(Procedure("Open") << c:\\miFichero.xls" << "0" <<true);



Esta forma de hacerlo no es la única, ya que al abrir el fichero desde tu aplicación, lo que se está haciendo es "abrir el fichero en el modo lectura", no pertiendote la modificación, si lo abres desde excel, te va ha pedir el pass.

Bueno, buscando por la ayuda del fichero de excel, he localizado lo referente al "metodo open":

Código:

Método Open
               

Abre un libro.

Sintaxis

expresión.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMRU)

expresión.
Requerida. Una expresión que devuelve un objeto Workbooks o RecentFile.

FileName.
String requerida. El nombre de archivo del libro que se va a abrir.

UpdateLinks.
Variant.
opcional. Especifica cómo se actualizan los vínculos del archivo. Si se omite este argumento, se preguntará al usuario. De lo contrario, el argumento tendrá uno de los siguientes valores:

Valor Significado
0 No actualiza vínculos.
1 Actualiza vínculos externos, pero no vínculos remotos.
2 Actualiza vínculos remotos, pero no vínculos externos.
3 Actualiza vínculos remotos y vínculos externos.


Si se abre un archivo en formato WKS, WK1 o WK3 y UpdateLinks tiene el valor 2, Excel generará gráficos a partir de los gráficos adjuntos al archivo. Si el argumento es 0, no se creará ningún gráfico.

ReadOnly.
Variant opcional. True para abrir el libro en modo de sólo lectura.

Format.
Variant opcional. Al abrir un archivo de texto, este argumento especifica qué carácter se utiliza como separador, como se muestra en la siguiente tabla. Si se omite este argumento, se utilizará el separador actual.

Valor Separador
1 Tabulación
2 Coma
3 Espacio
4 Punto y coma
5 Ninguno
6 Separador personalizado (véase el argumento Delimiter)


Password.
Variant opcional. Una cadena que contiene la contraseña para abrir un libro protegido. Si no se especifica y el libro requiere contraseña, se le pedirá al usuario.

WriteResPassword.
Variant opcional. Una cadena que contiene la contraseña para escribir en un libro protegido contra escritura. Si no se especifica y el libro requiere contraseña, se le pedirá al usuario.

IgnoreReadOnlyRecommended.
Variant opcional. True si no desea que se muestre el mensaje que recomienda abrir el libro en modo de sólo lectura (si el libro se ha guardado con la opción Recomendado sólo lectura).

Origin.
Variant opcional. Si el archivo es de texto, este argumento indica donde se originó. De esta manera podrán utilizarse la página de códigos y la combinación de retorno de carro y avance de línea correctas. Puede ser una de las siguientes constantes XlPlatform: xlMacintosh, xlWindows o xlMSDOS. Si se omite este argumento, se utilizará el sistema operativo actual.

Delimiter.
Variant opcional. Si el archivo es de texto y el argumento Format es 6, este argumento es una cadena que especifica el carácter que se utilizará como separador. Por ejemplo: puede utilizar Chr(9) para utilizar tabulaciones, "," para utilizar comas, ";" para utilizar punto y coma o puede utilizar otro carácter. Sólo se utiliza el primer carácter de la cadena.

Editable.
Variant opcional. Si el archivo es una macro automática de Excel 4.0 y el valor del argumento es True, se abrirá como ventana visible. Si el argumento es False o se omite, la macro automática estará oculta y no se podrá hacer visible. Esta opción no afecta a las macros automáticas creadas con Excel 5.0 o versiones posteriores. Si el archivo es una plantilla de Excel, True para abrir la plantilla especificada para su modificación. False para abrir un nuevo libro basado en la plantilla especificada. El valor predeterminado es False.

Notify.
Variant opcional. Si el archivo no se puede abrir en modo de Lectura/Escritura, al especificar True se agrega el archivo a la lista de notificación de archivos. El archivo se abrirá en modo de sólo lectura, se interrogará la lista de notificación de archivos y se notificará al usuario cuando el archivo quede disponible. Si este argumento es False o se omite, no se solicita notificación y fallarán todos los intentos de abrir un archivo no disponible.

Converter.
Variant opcional. Especifica el índice del primer convertidor de archivos que se utilizará al abrir el archivo. El convertidor especificado se utilizará en primer lugar. Si este no reconoce el archivo, se intentarán todos los demás convertidores. El índice del convertidor es el número de fila del convertidor devuelto por la propiedad FileConverters.

AddToMru.
Variant opcional. True para agregar el libro a la lista de archivos usados recientemente. El valor predeterminado es False.

Comentarios

Si el libro que se está abriendo contiene macros Auto_abrir, éstas no se ejecutarán al abrir el archivo desde Visual Basic. Para ejecutar las macros Auto_abrir debe utilizar el método RunAutoMacros.




Un saludo y espero haberte ayudado.
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Desde ya agradecido:

Estimado, en base a lo que explicaste y la sintaxis:

"expresión.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMRU)"

He probado y me da el sig error: "Error en el método Open de la clase Workbooks"

El ejemplo es:
xlBooks.Exec(Procedure("Open") << "d:\\Tipo.xls"<<"0"<<true<<""<<"1234");
donde
"d:\\Tipo.xls" es el archivo a abrir <Filename>
"0" es <UpdateLinks>
true es que abra en <Read Only>, también probé pasándolo como cadena "true"
"" es para omitir <Format>; no sé si esta es la manera de omitir un argumento
"1234" es el password de apertura <Password>.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola pampa

"1234" es el password de apertura que se le asigna al fichero de excel en el momento de crearlo y que luego hay que pasar como parámetro en la apertura del fichero o solicitarselo al usuario

Si no es eso lo que te pasa, te ruego me aclares un poco más la situación.

Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Exacto Rayder, así como decís debiera ser pero me genera ese error antes descripto, hecho por el cuál dude de la sintaxis, sobre todo en donde tengo que omitir el parámetro <Format>. Tal cuál como puse anterioremente es que lo tengo en el Builder.
PD: Si solo escribo:
xlBooks.Exec(Procedure("Open") << "d:\\Tipo.xls");
le solicita la pass al usuario; tal como debe de ser.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola pampa

Te voy a poner un código de ejemplo que funciona perfectamente en builder 5 pro con excel 2000 sin service pack.

En un nuevo proyecto, añade 3 TButton:

El 1º, generará el fichero de excel en C:\
El 2º, lo va ha mostrar abriendolo.
El 3º, cerrará la aplicación de ejemplo.
El proyecto soló tiene un formulario

En la cabecera del .cpp, hay que añadir:

// librerias necesarias para trabajar con excel
#include <Comobj.hpp> // para formater las celdas de excel

Ademas, uso el componente "ExcelGloval" de la pestaña "Servers", el cual añade la línea #include "Excel_2K_SRVR.h" en el "Unit.h".


Código del "Unit.h"
Código:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "Excel_2K_SRVR.h"
#include <OleServer.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TButton *Button1;
        TButton *Button2;
        TButton *Button3;
        TExcelGlobal *ExcelGlobal1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private:   // User declarations
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


y el código del "Unit.cpp"
Código:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

// librerias necesarias para trabajar con excel
#include <Comobj.hpp> // para formater las celdas de excel

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Excel_2K_SRVR"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
      Variant xlApp, VTemp, Fichero, hoja, shapes, VRange;

     //-------- Abre EXCEL
     xlApp = CreateOleObject("Excel.Application");

      //-------- OCULTO EXCEL
     xlApp.Exec(PropertySet("Visible") << true);

     //-------- crea acceso al objeto 'libro'/workbook
     Variant xlBooks = xlApp.Exec(PropertyGet("Workbooks"));

     //-------- Crea un fichero nuevo
     xlBooks.Exec(Procedure("Add") << 1); //CREA EL LIBRO CON UNA SOLA HOJA

     //SheetsInNewWorkbook  (hojas en el nuevo libro, ----- documentarse -----)

     //-------- crea el libro de la aplicacion con una sola hoja
     Variant xlBook = xlBooks.Exec(PropertyGet("Item") << 1);

     //-------- crea acceso al objeto 'hoja'/worksheets
     Variant xlSheets = xlBook.Exec(PropertyGet("Worksheets"));

     //-------- coge la primera hoja del libro
     Variant xlSheet = xlSheets.Exec(PropertyGet("Item") << 1);

     // Doy nombre a la hoja
     xlSheet.Exec(PropertySet("Name")<< "Hoja renombrada");

     // Obtenemos la hoja activa
     hoja   = xlApp.Exec(PropertyGet("ActiveSheet"));
     shapes = hoja.Exec(PropertyGet("Shapes"));

     //Escribimos algo en el fichero y lo formateamos
     VRange = xlSheet.Exec(PropertyGet("Range") << "B6");
     VRange.Exec(PropertySet("Value") << "Esto es una prueba de excel desde builder 5");
     VTemp = VRange.Exec(PropertyGet("Font"));
     VTemp.Exec(PropertySet("Color") << clBlack);
     VTemp.Exec(PropertySet("Bold") << true);
     VTemp.Exec(PropertySet("Italic") << true);
     VTemp.Exec(PropertySet("Underline") << true);
     VTemp.Exec(PropertySet("Size") << 24);

     //Y guardamos el libro actual asignando como pass "1234"
     xlBook.Exec(Procedure("SaveAs") << "C:\\pruebaDeExcel.xls"
                                         << xlWorkbookNormal
                                         << "1234");

     //Cierra excel para evitar los procesos residentes en memoria
     xlApp.Exec(PropertySet("Visible") << false);
     xlApp.Exec(Procedure("Quit"));
     xlApp.Clear();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
     //Declaro variables
     Variant xlApp;

     //-------- Abre EXCEL
     xlApp = CreateOleObject("Excel.Application");

     //-------- crea acceso al objeto 'libro'/workbook
     Variant xlBooks = xlApp.Exec(PropertyGet("Workbooks"));

     //-------- hace EXCEL visible
     xlApp.Exec(PropertySet("Visible") << true);

     //Abrimos el fichero en modo de solo lectura pasando el pass de acceso total
     /*xlBooks.Exec(Procedure("Open") << "c:\\pruebaDeExcel.xls"
                                        << "0"
                                        <<true
                                        << 5
                                        << "1234");*/

     //Abrimos el fichero pasando el pass de acceso total
     xlBooks.Exec(Procedure("Open") << "c:\\pruebaDeExcel.xls"
                                        << 0
                                        << false
                                        << 5
                                        << "1234");

     
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------


Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Perfecto Raider, funcionó:

el error estaba en que yo omitía el parámetro <format> con "" y escribiendo, tal como lo hiciste vos, el valor "5" (ninguno).
Gracias.

PD: nunca he utilizado el
"Ademas, uso el componente "ExcelGloval" de la pestaña "Servers", el cual añade la línea #include "Excel_2K_SRVR.h" en el "Unit.h". "
igual me funciona, ¿alguna sugerencia?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola pampa.

El componente "ExcelGloval", en teoria, es para hacer lo mismo que se hace por "Ole", pero yo nunca lo he utilizado, a excepción de cuando guardo los ficheros en un formato concreto para dar compatibilidad con versiones anteriores de excel, como excel 97 y cosas por el estilo. Naturalmente, tambien se podría hacen un include de forma manual, pero de esta forma, se hace todo lo necesario para que funcione de forma automática. Si te digo la verdad, la ayuda del builder viene un poco pelada o almenos yo no he encontrado la información. Lo que se, ha sido gracias a este foro y a base de investigar por la red. Si tienes necesidad, usa la función de busqueda del foro con "excel" como palabra clave, me consta que Leo tiene muchos post publicados, él si que controla el tema de excel.

Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: ExcelGloval Responder citando

Buenas a todo el foro:

Mi pregunta, es la siguiente.

Es lo mismo el componente ExcelGloval que ExcelOLEoBJECT1.

Ya que tengo el builder6 y en la pestaña servers, no me aparece ningun componente con ese nombre.

saludos
Volver arriba
Mensaje    Asunto: Responder citando

Buenas.

Pues si te digo la verdad, no tengo muy claro la finalidad del componente ExcelOLEoBJECT, he buscado en google y lo que he encontrado me da pie a pensar que es para realizar conexiones directas a ficheros. Me explico, en un documento de word, se puede insertar un componente ActiveX para mostrar datos desde otro fichero, por ejemplo, Excel; de esta forma, cuando se modifican los datos del fichero de excel, los datos del fichero de word se actualizan automáticamente, pero eso si, no lo tengo muy claro. Algo así a las tablas dinamicas de excel, las cuales dependen de los datos contenidos en Acess.

Pero eso si, nunca he utilizado este componente.

Y en respuesta a tu pregunta, te diria que no, son dos componentes diferentes para finalizades distintas, por otro lado, la versión que uso es la enterprise con la actualización 4.

Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Algo mas de las hojas Responder citando

Hola a todos, ya he probado del manejo de mas hojas, que era lo que necesitaba, lo he logrado con lo siguiente

Código:


    vExcel.OlePropertySet("SheetsInNewWorkbook", NumeroHojas);
    vExcel.OlePropertyGet("Workbooks").OleProcedure("Add");

// donde numero de hojas es un entero que indica la cantidad de hojas
//que queremos en el libro

....
....
....
// y para ponerles nombres a las N hojas creadas las cambio con
    Variant Hoja = vExcel.OlePropertyGet("Worksheets").OlePropertyGet("Item", NumeroHoja);
    Hj.OlePropertySet("Name",NombreHoja_n);



Ahora que tengo esto.. no me resulta indicar a la aplicacion que quiero que la hoja 2 sea la activa, para en esa hoja insertar texto, etc etc...

alguien sabe como indicar a la aplicacion que quiero que la hoja N sea la activa????
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola.

Añade tres TEdit y sus labels para poder identificarlos.
El Edit1 permitirá especificar el número de hojas que se van ha añadir, el Edit2 permitirá especificar la hoja sobre la que se va ha trabajar y el Edit3 permitirá asignar el nombre a la hoja.

Ahora modifica el evento OnClick del Button1, para que quede así:
Código:

int NumeroHojas = StrToInt(Edit1->Text);
     int SeleccionarHoja = StrToInt(Edit2->Text);
     AnsiString NombreHoja = Edit3->Text;

     Variant xlApp, VTemp, Fichero, hoja, shapes, VRange;

     //-------- Abre EXCEL
     xlApp = CreateOleObject("Excel.Application");

      //-------- MOSTRAR EXCEL
      //true = Visible
      //false = No Visible
     xlApp.Exec(PropertySet("Visible") << true);

     ////////////////////////////////////////////////////////////////////////
     // ESTO ES NUEVO
     ///////////////////////////////////////////////////////////////////////
     //Especificar el número de hojas
     xlApp.OlePropertySet("SheetsInNewWorkbook",NumeroHojas);
     xlApp.OlePropertyGet("Workbooks").OleProcedure("Add");
     ///////////////////////////////////////////////////////////////////////

     //-------- crea acceso al objeto 'libro'/workbook
     Variant xlBooks = xlApp.Exec(PropertyGet("Workbooks"));

     //-------- crea el libro de la aplicacion con una sola hoja
     Variant xlBook = xlBooks.Exec(PropertyGet("Item") << 1);

     //-------- crea acceso al objeto 'hoja'/worksheets
     Variant xlSheets = xlBook.Exec(PropertyGet("Worksheets"));

     //-------- coge la primera hoja del libro
     Variant xlSheet = xlSheets.Exec(PropertyGet("Item") << SeleccionarHoja);


     ////////////////////////////////////////////////////////////////////////
     // ESTO ES NUEVO
     ///////////////////////////////////////////////////////////////////////
     // Dar nombre a la hoja
     if(Edit3->Text == AnsiString(""))
        {
         xlSheet.Exec(PropertySet("Name")<< "Canbiar el nombre de esta hoja");
        }
        else
           {
            xlSheet.Exec(PropertySet("Name")<< NombreHoja);
           }



     ////////////////////////////////////////////////////////////////////////
     // Obtenemos la hoja activa
     hoja   = xlApp.Exec(PropertyGet("ActiveSheet"));
     shapes = hoja.Exec(PropertyGet("Shapes"));

     //Escribimos algo en el fichero y lo formateamos
     VRange = xlSheet.Exec(PropertyGet("Range") << "B6");
     VRange.Exec(PropertySet("Value") << "Esto es una prueba de excel desde builder 5");
     VTemp = VRange.Exec(PropertyGet("Font"));
     VTemp.Exec(PropertySet("Color") << clBlack);
     VTemp.Exec(PropertySet("Bold") << true);
     VTemp.Exec(PropertySet("Italic") << true);
     VTemp.Exec(PropertySet("Underline") << true);
     VTemp.Exec(PropertySet("Size") << 24);

     //Y guardamos el libro actual asignando como pass "1234"
     xlBook.Exec(Procedure("SaveAs") << "C:\\pruebaDeExcel.xls"
                                         << xlWorkbookNormal
                                         << "1234");

     //Cierra excel para evitar los procesos residentes en memoria
     xlApp.Exec(PropertySet("Visible") << false);
     xlApp.Exec(Procedure("Quit"));
     xlApp.Clear();

_________________
Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Como eliminar una Fila completa? Responder citando

Hola... alguien sabe como se puede eliminar una fila completa de la hoja activa?

de manera de eliminar la fila 22 y se corra todo...??
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Para eliminar un rango de datos, utilliza el metodo "Delete", especificando el rango que se desea eliminar.

Código:

//-------- Borrar rango de celdas E1:E3 fisicamente
VRange = xlSheet.Exec(PropertyGet("Range") << "E1:E3");
VRange.Exec(Function("Delete"));


Por otra parte, si lo que desea hacer es eliminar toda la línea, primero hay que seleccionarla y despues, utilizando el método "Delete", se elimina:
Código:

//-------- Sleccionar una linea completa y borrarla
//-------- Se ha seleccionado la linea 5 de la página activa
VRange = xlSheet.Exec(PropertyGet("Rows") << "5");

//-------- Elimina la línea
VRange.Exec(Function("Delete"));

//-------- Seleccionar la línea
VRange.Exec(Function("Select"));

_________________
Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.