1

Konu: Excel dosya açma save etme

Bir excel klası (=> This ) için aşağıdaki kodları yapmak isterken dağıldım - çarşaf oldum da denebilinir - 
Galiba excel ilk açtığında bir tmp yaratıyor - sonra onu silip esasını kaydediyor (Soykan'ın bir makalesinden öyle anladım)
Yapmak istediğimi kodların yanına yazdım:
DOSYA ADI İLE AÇ
DOSYA ADI GEÇİRİLMEMİŞ İSE DOSYA SOR ::GETFILE()
GETFILE BOŞ DÖNÜYORSA ANONİM DOSYA ADI VER

AÇILAN DOSYANIN SAYFALARINI DENETLE
AYNI İSİMLE SAYFA VAR İSE SONUNA I EKLE
SAYFAYI YENİ ADLA AÇ

DOSYAYI YENİ SAYFA İLE KAYDET ..mek ve bütün bunlar için

Visual Fox Pro
With oExcel As "Excel.Application"

m.defaultdir=SYS(5)+SYS(2003)
IF  ISBLANK(This.Dosyad)  && dosya adı yok getfile ile seçilebilinecek
  WAIT NOWAIT WINDOW "dosya seçerseniz sayfa eklenecek"+CHR(13)+"ve seçili ad ile saklanacak";
              +CHR(13)+CHR(13)+"seçmezseniz "+ADDBS(This.Dizinad)+This.dosyad+".xls dosyası oluşturulacak"
  m.Dosyad=GETFILE("xls","excel dosyasI seçin","seç",1,"SEÇİM YAPMAZSANIZ YENİ DOSYA OLUŞTURULACAK")
 
IF ISBLANK(m.dosyad)   && GETFILE() ile seçmedik
    m.Dosyad=ADDBS(This.Dizinad)+"DosyaAdGirilmedi.xls"
    m.Dosyad=CHRTRAN(m.dosyad,"öÖYüÜşŞğĞçÇ() ","oOIuUSsgGcC")
    m.yenidosya=.t.
    .Workbooks.Add
  ELSE  &&   && GETFILE() ile seçtik
    IF FILE(m.Dosyad)  && burada çarşafa dolanmaya başlıyorum,
                                   && aslında gerek yok gibi görünüyor ama dosyayı birtürlu bulamadım
      .Workbooks.Open(m.dosyad)
      m.yenidosya=.f.
    ELSE
      m.yenidosya=.t.
      .Workbooks.Add
    ENDI 
  ENDIF
  This.Dosyad=m.dosyad
ELSE  && dosya adı geçirilmiş
  m.dosyad=ADDBS(This.Dizinad)+This.dosyad
    IF FILE(m.Dosyad)
      .Workbooks.Open(m.dosyad) 
      m.yenidosya=.f.
    ELSE
      m.yenidosya=.t.
      .Workbooks.Add
    ENDI 
ENDIF
*
.Visible = .T.
 
IF ISBLANK(This.Sayfad)
  m.Sayfad="X"
ELSE  && sayfa adı geçirilmiş
  m.Sayfad=This.Sayfad
ENDIF
m.Sayfad=CHRTRAN(m.Sayfad,"/&%#","*")
 
m.xi=1
m.sayfaek=" "
m.sayfadx=m.sayfad
DO WHIL m.xi < .ActiveWorkbook.Sheets.Count
  IF ALLTRIM(UPPER(.ActiveWorkbook.Sheets[m.xi].Name))=ALLTRIM(UPPER(m.sayfad))
    m.sayfaek=m.sayfaek+"I"
    m.sayfad=LEFT(m.sayfadx,31-LEN(m.sayfaek))+m.sayfaek
    m.xi=1
  ELSE
    m.xi=m.xi+1
  ENDIF
ENDD
 
.ActiveWorkBook.sheets.Add
.ActiveWorkbook.ActiveSheet.Name = m.sayfad


sonrası excel işlemleri ve kaydetme bölümü

Visual Fox Pro
IF m.yenidosya

  .ActiveWorkbook.SaveAs(ADDBS(tHis.Dizin)+This.dosyad, -4143)
ELSE
.ActiveWorkbook.Save(This.dosyad)
ENDIF
.ActiveWorkbook.Saved = .T.
ENDWITH
 
*beceremdiğim Soykan'a ait kodlar
*MyFile = This.dosyad
*MyFileJustName = Justfname(MyFile)
*IF m.yenidosya
*    If File(MyFile)
*       Erase (MyFile)
*   Endif
*   oExcel.ActiveWorkbook.SaveAs(MyFile)
*Else
*   oExcel.ActiveWorkbook.Save()
*Endif
 
SET DIRE TO (m.defaultdir)
VFP9 SP2

2

Re: Excel dosya açma save etme

Ali Abi; şunun sana faydası dokunur mu?

http://social.msdn.microsoft.com/Forums … ce891f1a2f


Visual Fox Pro
************************************************************

* Function CombineExcelFiles
************************************************************
* Created...........: Craig Boyd 3/6/2006 23:55:50
*) Description.......:
* Calling Samples...: DIMENSION aXLSFiles(3)
*!*                    aXLSFiles(1) = "C:\temp1.xls"
*!*                    aXLSFiles(2) = "C:\temp2.xls"
*!*                    aXLSFiles(3) = "C:\temp3.xls"
*!*                    CombineExcelFiles(@aXLSFiles, "C:\XLSCombined.xls")
* Parameter List....:
* Major change list.:
function CombineExcelFiles (taXLSFiles, tcDestination, tlDeleteOriginal)
external array taXLSFiles
local loExcel as Excel.application, ;
    loWorkBook as Excel.Worksbook, ;
    loWorkSheet , ;
    lnCounter, lcWorkSheetCaption, lcError, ;
    lcValidChars
 
lcError = ""
 
try
    lcValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 "
    loExcel = newobject("Excel.Application")
    with loExcel
        .ScreenUpdating = .f.
        .DisplayAlerts = .f.
        .WorkBooks.add()
        lnCounter = 0
 
** Delete all existing worksheets except 1
        for each loWorkSheet in .WorkBooks(1).WorkSheets
            lnCounter = m.lnCounter + 1
            if m.lnCounter > 1
                loWorkSheet.delete
            endif
        endfor
 
        for lnCounter = 1 to alen(taXLSFiles,1)
            if file(taXLSFiles[m.lnCounter])
                lcWorkSheetCaption = juststem(taXLSFiles[m.lnCounter])
                loWorkBook = .WorkBooks.open(taXLSFiles[m.lnCounter])
                loWorkBook.WorkSheets(1).copy(null, ;
                    .WorkBooks(1).WorkSheets(.WorkBooks(1).WorkSheets.count))
                .WorkBooks(1).ActiveSheet.name = ;
                    right(alltrim(chrtran(m.lcWorkSheetCaption, ;
                    chrtran(m.lcWorkSheetCaption,m.lcValidChars,"")," ")), 31) &&loWorkBook.Name
                loWorkBook.close(.f.) && Do not save changes
                if m.tlDeleteOriginal
                    erase (taXLSFiles[m.lnCounter])
                endif
            endif
        endfor
** Remove the first original sheet from (Sheet1)
        .WorkBooks(1).WorkSheets(1).delete
 
        .WorkBooks(1).saveas(m.tcDestination)
        .ScreenUpdating = .t.
        .DisplayAlerts = .t.
    endwith
 
catch to loError
    lcError = Log_Error(m.loError)
finally
    if vartype(m.loExcel) = 'O'
        with loExcel
            .ScreenUpdating = .t.
            .DisplayAlerts = .t.
            .quit()
        endwith
    endif
endtry
 
return m.lcError
endfunc
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3 Son düzenleyen, ugurlu2001 (25.02.2011 16:34:35)

Re: Excel dosya açma save etme

Ali abi;

Birde Excel dosyasını sanki bir tablo gibi kullanabilirsin ve datayı excel e yerleştirdikten sonra bu şekilde kaydedebilirsin :

Visual Fox Pro
* I did not take the note of Author.

* Public Code from foxpro forums

Visual Fox Pro
oExcel = CREATEOBJECT("Excel.Application")

oBook = oExcel.Workbooks.ADD
oSheet = oBook.Worksheets(1)
 
* 'Create the QueryTable object.
LOCAL oQryTable AS OBJECT, sNorthwind AS STRING
sNorthwind = HOME(2) +;
[NORTHWIND\NORTHWIND.DBC]
oQryTable = oSheet.QueryTables.ADD ;
("OLEDB;Provider=VFPOLEDB.1;Data Source="+sNorthwind+";", ;
oSheet.RANGE("A1"),"Select * from Orders")
oQryTable.RefreshStyle = 2 && xlInsertEntireRows = 2
oQryTable.REFRESH(.F.)
oExcel.VISIBLE=.T.
 
***
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4