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 

cambiar valor en coordenadas de excel

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

e buscado en el foro pero no me aclaro, que tnego que hacer para cambiar a "ejemplo.xls" en las coordenadas B-1 de la hoja 1,por ejemplo, cambiar su valor por 800 en int.?? esto lo aria sin mostrar el excel verda?
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Esto lo encontre en una pagina creo alemana, te lo paso. saludos
Código:

MS-Excel über die OLE-Schnittstelle steuern:
   
Dieses Beispiel von Holger Mackeldey zeigt, wie Microsoft Excel von einer
C++ Builder-Anwendung aus über die OLE-Schittstelle gesteuert werden kann.

Der Code veranschaulicht wie Excel gestartet und beendet wird, wie Dateien (Arbeitsmappen)
geöffnet werden, wie auf die Arbeitsblätter/Zellen zugegriffen wird und viel mehr !



//---------------------------------------------------------------------------
// ExcelRemoteControl.h, Author: Holger Mackeldey
//---------------------------------------------------------------------------
#ifndef ExcelRemoteControlH
#define ExcelRemoteControlH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------


class TExcelOLE : public TForm
{
  private:
    Variant m_vExcel;         // OLE Schnittstelle zu Excel
    Variant m_vWorkbooks_00;  // OLE Schnittstelle zur "Ur-Arbeitsmappe"
                              // aus der werden andere erzeugt
    Variant m_vWorksheets;    // OLE Schnittstelle zu Tabellen
    Variant m_vCharts;        // OLE Schnittstelle zu Diagrammen

  __published:  // Komponenten, die von der IDE verwaltet werden
        TButton *TestExcelOLE;
        void __fastcall TestExcelOLEClick(TObject *Sender);
  private:  // Benutzerdeklarationen

  public:    // Benutzerdeklarationen
            __fastcall TExcelOLE(TComponent* Owner);
    Variant __fastcall OpenExcelOLE(bool bVisible);
    Variant __fastcall CreateWorkbook( DWORD dwWorkbooknumber );
    Variant __fastcall CreateNewTable( Variant vWorkbook,char* cTablename );
    Variant __fastcall GetTableByName( Variant vWorkbook,char* cTablename );
    void    __fastcall WriteTableCell( Variant vWorkbook,char*
      cWorksheetName,DWORD dwRow,DWORD dwCol,Variant vValue );
    Variant __fastcall ReadTableCell( Variant vWorkbook,char*
      cWorksheetName,DWORD dwRow,DWORD dwCol );
    void    __fastcall FormulaOnRange( Variant vWorkbook,char*
      cWorksheetName,AnsiString asRange,AnsiString asFormula );
    void    __fastcall ColourOnRange( Variant vWorkbook,char*
      cWorksheetName,AnsiString asRange,Variant ColourIndex );
    void    __fastcall SetColumnWidth( Variant vWorkbook,char*
      cWorksheetName,AnsiString asRange, Variant ColumnWidth );
    void    __fastcall SaveWorkbook( Variant vWorkbook,
      AnsiString SavePath, bool bConfirm );
    void    __fastcall TerminateExcel();
    bool    __fastcall CellBorderSet( Variant vWorkbook,char*
      cWorksheetName,AnsiString &CellName, int Border_Code,int Line_Style );
    bool    __fastcall BookOpen(AnsiString &BookName);
    bool    __fastcall BookClose(AnsiString &BookName);
};

//---------------------------------------------------------------------------
extern PACKAGE TExcelOLE *ExcelOLE;
//---------------------------------------------------------------------------

#endif

//---------------------------------------------------------------------------
// ExcelRemoteControl.cpp, Author: Holger Mackeldey
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <comobj.hpp>   // für OLE
#include <utilcls.h>    // für OLE
#pragma hdrstop

#include "ExcelRemoteControl.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TExcelOLE *ExcelOLE;

// Borderdefines
#define BLeft    2
#define BRight   4
#define BTop     8
#define BBottom 16

#define LNone    0
#define LSingle  1
#define LDouble  9
#define LBold    7

//---------------------------------------------------------------------------
__fastcall TExcelOLE::TExcelOLE(TComponent* Owner)
        : TForm(Owner)
{
}

/***************************************************************************
 Function: Ereignisroutine der Testbuttons "TestExcelOLE"
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::TestExcelOLEClick(TObject *Sender)
{
  AnsiString asExcelFile = "Test.xls";
  OpenExcelOLE( true );  // öffnet Excel sichtbar
  Variant vWorkbook  = CreateWorkbook( 1 );
  Variant vWorksheet = CreateNewTable( vWorkbook,"Test" );

  for( DWORD dwIndex = 1; dwIndex < 10; dwIndex++ )
  {
    WriteTableCell( vWorkbook,"Test",dwIndex, 1, 33333 );
    WriteTableCell( vWorkbook,"Test",dwIndex, 2, 44444 );
    DWORD dwReadValue = ReadTableCell( vWorkbook,"Test",dwIndex, 1 );
  }

  ColourOnRange( vWorkbook,"Test","A1:A1",1 );
  ColourOnRange( vWorkbook,"Test","A2:A2",2 );
  ColourOnRange( vWorkbook,"Test","A3:A3",3 );
  ColourOnRange( vWorkbook,"Test","A4:A4",4 );
  ColourOnRange( vWorkbook,"Test","A5:A5",5 );
  ColourOnRange( vWorkbook,"Test","A6:A6",6 );
  FormulaOnRange( vWorkbook,"Test","C1:C1","=A1 + 1000" );
  CellBorderSet( vWorkbook,"Test","C1", BBottom,LDouble );
  SaveWorkbook( vWorkbook, asExcelFile, false );
  BookClose( asExcelFile );
  TerminateExcel();
}

/***************************************************************************
 Function: öffnet eine OLE Schnittstelle zu MS Excel entweder sichtbar oder
           unsichtbar
 Author: Holger Mackeldey
****************************************************************************/

Variant __fastcall TExcelOLE::OpenExcelOLE( bool bVisible )
{
  try
  {
    m_vExcel = CreateOleObject("Excel.Application.8");
    if( bVisible )
    {
      m_vExcel.OlePropertySet("Visible",true);
    }
    m_vWorkbooks_00 = m_vExcel.OlePropertyGet("Workbooks");
    return( m_vExcel );
  }

  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Öffnen der OLE-Schnittstelle" );
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return 0;
  }
}

/***************************************************************************
 Function: erzeugt einen neue Arbeitsmappe und gibt dessen Schnittstelle
           zurück
 Author: Holger Mackeldey
****************************************************************************/
Variant __fastcall TExcelOLE::CreateWorkbook( DWORD dwWorkbooknumber )
{
  try
  {
    m_vWorkbooks_00.OleProcedure("Add");
    return( m_vWorkbooks_00.OlePropertyGet("Item",dwWorkbooknumber) );
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Öffnen der OLE-Schnittstelle" );
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return 0;
  }
}

/***************************************************************************
 Function: öffnet eine existierende Arbeitsmappe
 Author: Holger Mackeldey
****************************************************************************/

bool __fastcall TExcelOLE::BookOpen(AnsiString &BookName)
{
  try
  {
    m_vWorkbooks_00 = m_vExcel.OlePropertyGet("Workbooks").OlePropertyGet("Open", BookName);
    return true;
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Öffnen der Arbeitsmappe \"%s\"", BookName.c_str());
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return false;
  }
}

/***************************************************************************
 Function: schließt die offene Arbeitsmappe
 Author: Holger Mackeldey
****************************************************************************/

bool __fastcall TExcelOLE::BookClose(AnsiString &BookName)
{
  try
  {
    m_vWorkbooks_00.OleProcedure("Close");
    return true;
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Schließen der Arbeitsmappe \"%s\"", BookName.c_str());
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return false;
  }
}

/***************************************************************************
 Function: erzeugt einen neue Arbeitsmappe und gibt dessen Schnittstelle
           zurück
 Author: Holger Mackeldey
****************************************************************************/
Variant __fastcall TExcelOLE::CreateNewTable( Variant vWorkbook,char* cTablename )
{
  try
  {
    Variant vWorksheets;
    Variant vWorksheet;
    vWorksheets = vWorkbook.OlePropertyGet("Worksheets") ;
    vWorksheets.OleProcedure("Add");
    vWorksheet = m_vExcel.OlePropertyGet( "ActiveSheet" );
    vWorksheet.OlePropertySet("Name",cTablename);
    return( vWorksheet );
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Erzeugen der Tabelle \"%s\"", cTablename);
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return 0;
  }
}



/***************************************************************************
 Function: gibt die Tabelle mit dem übergebenen Namen zurück
 Author: Holger Mackeldey
****************************************************************************/
Variant __fastcall TExcelOLE::GetTableByName( Variant vWorkbook,char* cTablename )
{
  try
  {
    Variant vWorksheet;
    Variant vWorksheets;

    vWorksheets = vWorkbook.OlePropertyGet("Worksheets") ;
    vWorksheet  = vWorksheets.OlePropertyGet("Item",cTablename);
    return( vWorksheet );
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Ermitteln der Tabelle \"%s\"", cTablename);
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return 0;
  }
}

/***************************************************************************
 Function: schreibt einen Wert in die angegebene Zelle
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::WriteTableCell( Variant vWorkbook,char* cWorksheetName,DWORD dwRow, DWORD dwCol,Variant vValue )
{
  try
  {
    Variant vWorksheet = GetTableByName( vWorkbook,cWorksheetName );
    vWorksheet.OlePropertyGet("Cells").OlePropertyGet("Item",dwRow,dwCol).OlePropertySet("Value",vValue);
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Schreiben einer Zelle");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
  }
}


/***************************************************************************
 Function: liest einen Wert aus der angegebenen Zelle
 Author: Holger Mackeldey
****************************************************************************/
Variant __fastcall TExcelOLE::ReadTableCell( Variant vWorkbook,char* cWorksheetName,DWORD dwRow, DWORD dwCol )
{
  try
  {
    Variant vWorksheet = GetTableByName( vWorkbook,cWorksheetName );
    Variant vValue = vWorksheet.OlePropertyGet("Cells").OlePropertyGet("Item",dwRow,dwCol).OlePropertyGet("Value");
    return( vValue );
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Lesen einer Zelle");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
    return 0;
  }
}

/***************************************************************************
 Function: bastelt eine Formel in den angegebenen Bereich
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::FormulaOnRange( Variant vWorkbook,char* cWorksheetName,
                                           AnsiString asRange, AnsiString asFormula )
{
  try
  {
    Variant vWorksheet = GetTableByName( vWorkbook,cWorksheetName );
    Variant vRange     = vWorksheet.OlePropertyGet("Range",asRange);
    vRange.OlePropertySet("Formula",asFormula);
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Erzeugen einer Formel über einen Bereich");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
  }
}

/***************************************************************************
 Function: Färbt die angegebenen Zellen mit der übergebene Farbe ein
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::ColourOnRange( Variant vWorkbook,char* cWorksheetName,
                                          AnsiString asRange, Variant ColourIndex )
{
  try
  {
    Variant vWorksheet = GetTableByName( vWorkbook,cWorksheetName );
    Variant vRange     = vWorksheet.OlePropertyGet("Range",asRange);
    vRange.OlePropertyGet("Interior").OlePropertySet("ColorIndex",ColourIndex);
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Ändern der Farbe eines Bereiches");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
  }
}

/***************************************************************************
 Function: setzt die Breite iner Spalte
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::SetColumnWidth( Variant vWorkbook,char* cWorksheetName,
                                           AnsiString asRange, Variant ColumnWidth )
{
  try
  {
    Variant vWorksheet = GetTableByName( vWorkbook,cWorksheetName );
    vWorksheet.OlePropertyGet("Columns",asRange).OlePropertySet("ColumnWidth",ColumnWidth);
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Ändern der Breite einer Spalte");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
  }
}

/***************************************************************************
 Function: speichert die aktuelle Mappe mit oder ohne Bestätigungs-
           aufforderung
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::SaveWorkbook( Variant vWorkbook, AnsiString SavePath, bool bConfirm )
{
  try
  {
    m_vExcel.OlePropertySet("DisplayAlerts",bConfirm);
    vWorkbook.OleProcedure("SaveAs",SavePath);
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Speichern einer Arbeitsmappe");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
  }
}

/***************************************************************************
 Function: Ändert den Rahmen einer Zelle
 Author: Holger Mackeldey
****************************************************************************/
bool __fastcall TExcelOLE::CellBorderSet( Variant vWorkbook,char* cWorksheetName,
                                          AnsiString &CellName, int Border_Code,
                                          int Line_Style )
{
  Variant var_Cell;
  Variant vWorksheet = GetTableByName( vWorkbook,cWorksheetName );
  try
  {
    switch ( Line_Style )
    {
        case LSingle:
        {
          for( int i=1; i <= 4; i++ )
          {
            if( Border_Code & (2<<(i-1)))
              vWorksheet.OlePropertyGet("Range", CellName).
              OlePropertyGet("Borders", i).
              OlePropertySet("LineStyle", LSingle);
          }
          return true;
        }
        case LBold:
        {
          for( int i=1; i <= 4; i++ )
          {
            if( Border_Code & (2<<(i-1)))
            {
              var_Cell = vWorksheet.OlePropertyGet("Range", CellName);
              var_Cell.OlePropertyGet("Borders", i).
              OlePropertySet("LineStyle", LSingle);
              var_Cell.OlePropertyGet("Borders", i).
              OlePropertySet("LineStyle", LBold);
            }
          }
          return true;
        }
        case LDouble:
        {
          for( int i=1; i <= 4; i++ )
          {
            if( Border_Code & (2<<(i-1)))
              vWorksheet.OlePropertyGet("Range", CellName).
              OlePropertyGet("Borders", i).
              OlePropertySet("LineStyle", LDouble);
          }
          return true;
        }
        default:
        {
          for( int i=1; i <= 4; i++ )
          {
            if( Border_Code & (2<<(i-1)))
              vWorksheet.OlePropertyGet("Range", CellName).
              OlePropertyGet("Borders", i).
              OlePropertySet("LineStyle", Line_Style);
          }
          return true;
        }
    }
  }
  catch(...)
  {
    MessageBox( 0, "Fehler in CellBorderSet", "Fehler", MB_OK );
    return false;
  }
}

/***************************************************************************
 Function: beendet Excel
 Author: Holger Mackeldey
****************************************************************************/
void __fastcall TExcelOLE::TerminateExcel()
{
  try
  {
    m_vExcel.OleProcedure("Quit");
  }
  catch(...)
  {
    char cBuffer[255];
    sprintf( cBuffer, "Fehler beim Beenden von Excel");
    MessageBox( 0, cBuffer, "Fehler", MB_OK );
  }
}

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

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.