PDA

View Full Version : خروجی به اکسل



samkoper
دوشنبه 15 اسفند 1390, 20:58 عصر
با سلام
دوستان برای خروجی به اکسل من از یک روشی استفاده می کنم که خط به خط داده ها توی اکسل وارد میشن و در مواقعی که تعداد خطوط زیاد باشه خیلی زمان می بره.
حالا دوستان کسی میدونه میشه مثل سایت بانکها به صورت یکدفعه فایل کامل رو به خروجی فرستاد و خط به خط نباشه ؟

joker_pok
جمعه 19 اسفند 1390, 20:45 عصر
واسه برنامه ای می خوای که توش پایگاه داده استفاده کردی ؟

samkoper
شنبه 20 اسفند 1390, 15:20 عصر
بله دوست عزيز؛ از اكسس استفاده مي‌كنه

ARData
شنبه 20 اسفند 1390, 15:34 عصر
Sub Copy_ActiveSheet_1()
'Working in Excel 97-2010
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

Set Sourcewb = ActiveWorkbook

'Copy the sheet to a new workbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook

'Determine the Excel version and file extension/format
With Destwb
If Val(Application.Version) < 12 Then
'You use Excel 97-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007-2010
'We exit the sub when your answer is NO in the security dialog that you
'only see when you copy a sheet from a xlsm file with macro's disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is NO in the security dialog"
Exit Sub
Else
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With

' 'Change all cells in the worksheet to values if you want
' With Destwb.Sheets(1).UsedRange
' .Cells.Copy
' .Cells.PasteSpecial xlPasteValues
' .Cells(1).Select
' End With
' Application.CutCopyMode = False

'Save the new workbook and close it
TempFilePath = Application.DefaultFilePath & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "yyyy-mm-dd hh-mm-ss")

With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
.Close SaveChanges:=False
End With

MsgBox "You can find the new file in " & TempFilePath

With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub



Sub Copy_ActiveSheet_2()
'Working in Excel 2000-2010
Dim fname As Variant
Dim NewWb As Workbook
Dim FileFormatValue As Long

'Check the Excel version
If Val(Application.Version) < 9 Then Exit Sub
If Val(Application.Version) < 12 Then

'Only choice in the "Save as type" dropdown is Excel files(xls)
'because the Excel version is 2000-2003
fname = Application.GetSaveAsFilename(InitialFileName:="", _
filefilter:="Excel Files (*.xls), *.xls", _
Title:="This example copies the ActiveSheet to a new workbook")

If fname <> False Then
'Copy the ActiveSheet to new workbook
ActiveSheet.Copy
Set NewWb = ActiveWorkbook

'We use the 2000-2003 format xlWorkbookNormal here to save as xls
NewWb.SaveAs fname, FileFormat:=-4143, CreateBackup:=False
NewWb.Close False
Set NewWb = Nothing

End If
Else
'Give the user the choice to save in 2000-2003 format or in one of the
'new formats. Use the "Save as type" dropdown to make a choice,Default =
'Excel Macro Enabled Workbook. You can add or remove formats to/from the list

fname = Application.GetSaveAsFilename(InitialFileName:="", filefilter:= _
" Excel Macro Free Workbook (*.xlsx), *.xlsx," & _
" Excel Macro Enabled Workbook (*.xlsm), *.xlsm," & _
" Excel 2000-2003 Workbook (*.xls), *.xls," & _
" Excel Binary Workbook (*.xlsb), *.xlsb", _
FilterIndex:=2, Title:="This example copies the ActiveSheet to a new workbook")

'Find the correct FileFormat that match the choice in the "Save as type" list
If fname <> False Then
Select Case LCase(Right(fname, Len(fname) - InStrRev(fname, ".", , 1)))
Case "xls": FileFormatValue = 56
Case "xlsx": FileFormatValue = 51
Case "xlsm": FileFormatValue = 52
Case "xlsb": FileFormatValue = 50
Case Else: FileFormatValue = 0
End Select

'Now we can create/Save the file with the xlFileFormat parameter
'value that match the file extension
If FileFormatValue = 0 Then
MsgBox "Sorry, unknown file extension"
Else
'Copies the ActiveSheet to new workbook
ActiveSheet.Copy
Set NewWb = ActiveWorkbook

'Save the file in the format you choose in the "Save as type" dropdown
NewWb.SaveAs fname, FileFormat:= _
FileFormatValue, CreateBackup:=False
NewWb.Close False
Set NewWb = Nothing

End If
End If
End If
End Sub

vbhamed
شنبه 20 اسفند 1390, 15:40 عصر
سلام

از كامپوننت ComponentOne VsFlexGrid استفاده كن، DataSource اون رو به كنترل DAO يا ADO ارتباط بده، بعد با متدهاي خودش Export كن
VSFlexGrid1.SaveGrid "c:\test.xls", flexFileExcel

ARData
شنبه 20 اسفند 1390, 15:45 عصر
[Public Sub export2excel()
On Error GoTo er
Dim oExcel As Object
Set oExcel = CreateObject("Excel.Application")
Dim oWorkBook As Object
Dim oWorkSheet As Object
Dim i As Integer, k As Integer
Dim lRow As Long
Dim LastRow As Long
Dim LastCol As Long
oExcel.Visible = False
oExcel.Workbooks.Open App.Path & "\Nirmal.xls"
Set oWorkSheet = oExcel.Workbooks("Nirmal.xls").sheets("Batch")

i = 2 'Row in Excel

LastRow = frmFind.DataGrid1.Row 'Save Current row
LastCol = frmFind.DataGrid1.Col 'and column
frmFind.DataGrid1.Row = 0 'Fixed Row is -1
Do While frmFind.DataGrid1.Row <= frmFind.DataGrid1.VisibleRows - 1
For k = 1 To frmFind.DataGrid1.Columns.Count - 1
frmFind.DataGrid1.Col = k 'Fixed Column is -1
oWorkSheet.Cells(i, k).Font.Bold = False
oWorkSheet.Cells(i, k).Font.Color = vbBlack
oWorkSheet.Cells(i, k).Value = frmFind.DataGrid1.Text
Next
i = i + 1
If frmFind.DataGrid1.Row < frmFind.DataGrid1.VisibleRows - 1 Then
frmFind.DataGrid1.Row = frmFind.DataGrid1.Row + 1
Else
Exit Do
End If
Loop
frmFind.DataGrid1.Row = LastRow 'Restore original Row
frmFind.DataGrid1.Col = LastCol 'and Column

oExcel.Workbooks("Nirmal.xls").Save
oExcel.Workbooks("Nirmal.xls").Close savechanges:=True
oExcel.Quit

er:
If Err.Number = 1004 Then
Exit Sub
End If
End Sub

samkoper
یک شنبه 21 اسفند 1390, 08:03 صبح
دوستان ممنون از لطف شما؛
از كدهايي كه داديد استفاده كردم ولي متاسفانه به نتيجه نرسيدم ظاهرا فايل ساخته ميشه ولي بازش كه ميكنم خاليه
براي درك بهتر اگه لطف كنيد نمونه سورسش رو به صورت پروژه بزارين ممنون ميشم.
باز هم ممنون

ARData
یک شنبه 21 اسفند 1390, 09:52 صبح
اين هم نمونه :

ARData
یک شنبه 21 اسفند 1390, 09:55 صبح
'do declare these variables you need to add a reference
'to the microsoft excel 'xx' object library.

'you need two text boxes and two command buttons
'on the form, an excel file in c:\book1.xls

Dim xl As New Excel.Application
Dim xlsheet As Excel.Worksheet
Dim xlwbook As Excel.Workbook

Private Sub Command1_Click()
'the benifit of placing numbers in (row, col) is that you
'can loop through different directions if required. I could
'have used column names like "A1" 'etc.

Text1.Text = xlsheet.Cells(2, 1) ' row 2 col 1
Text2.Text = xlsheet.Cells(2, 2) ' row 2 col 2

'don't forget to do this or you'll not be able to open
'book1.xls again, untill you restart you pc.
xl.ActiveWorkbook.Close False, "c:\book1.xls"
xl.Quit
End Sub

Private Sub Command2_Click()
xlsheet.Cells(2, 1) = Text1.Text
xlsheet.Cells(2, 2) = Text2.Text
xlwbook.Save

'don't forget to do this or you'll not be able to open
'book1.xls again, untill you restart you pc.
xl.ActiveWorkbook.Close False, "c:\book1.xls"
xl.Quit
End Sub

Private Sub Form_Load()
Set xlwbook = xl.Workbooks.Open("c:\book1.xls")
Set xlsheet = xlwbook.Sheets.Item(1)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set xlwbook = Nothing
Set xl = Nothing
End Sub

samkoper
یک شنبه 21 اسفند 1390, 18:48 عصر
ممنون دوست من؛ اما این همون طور به صورت خط به خط داده ها رو وارد می کنه و اگه مثلا بخواد 2000 رکورد رو که هر رکورد شامل حدود 15 فیلد هست خروجی بگیره خیلی زمان میبره اما من توی وب دیدم که به محض کلیک روی دریافت فایل اکسل بعد از چند ثانیه کل فایل رو به صورت کامل تحویل میده.

helpsos
سه شنبه 08 فروردین 1391, 23:57 عصر
سلام دوستان کسی راه حلی بلد نیست؟ لطفا کمک کنید من هم این مشکل رو دارم وقتی تعداد فیلدها زیاد میشه خیلی زمان میبره

m.4.r.m
سه شنبه 26 آذر 1392, 12:03 عصر
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add
Dim RS As Long
RS = Adodc1.Recordset.RecordCount
ReDim DataArray(1 To RS, 1 To 25) As Variant
' 1 to 25 (تعداد ستون های های شماست)
' شما به تعداد ستون های خودتون باید این عدد رو وارد کنید
Dim r As Integer
Dim NumberOfRows As Integer
If Adodc1.Recordset.RecordCount > 0 Then
NumberOfRows = Adodc1.Recordset.RecordCount
Adodc1.Recordset.MoveFirst

For r = 1 To NumberOfRows
DataArray(r, 1) = Adodc1.Recordset.Fields(0)
DataArray(r, 2) = Adodc1.Recordset.Fields(1)
DataArray(r, 3) = Adodc1.Recordset.Fields(2)
DataArray(r, 4) = Adodc1.Recordset.Fields(3)
DataArray(r, 5) = Adodc1.Recordset.Fields(4)
DataArray(r, 6) = Adodc1.Recordset.Fields(5)
DataArray(r, 7) = Adodc1.Recordset.Fields(6)
DataArray(r, 8) = Adodc1.Recordset.Fields(7)
DataArray(r, 9) = Adodc1.Recordset.Fields(8)
DataArray(r, 10) = Adodc1.Recordset.Fields(9)
DataArray(r, 11) = Adodc1.Recordset.Fields(10)
DataArray(r, 12) = Adodc1.Recordset.Fields(11)
DataArray(r, 13) = Adodc1.Recordset.Fields(12)
DataArray(r, 14) = Adodc1.Recordset.Fields(13)
DataArray(r, 15) = Adodc1.Recordset.Fields(14)
DataArray(r, 16) = Adodc1.Recordset.Fields(15)
DataArray(r, 17) = Adodc1.Recordset.Fields(16)
DataArray(r, 18) = Adodc1.Recordset.Fields(17)
DataArray(r, 19) = Adodc1.Recordset.Fields(18)
DataArray(r, 20) = Adodc1.Recordset.Fields(19)
DataArray(r, 21) = Adodc1.Recordset.Fields(20)
DataArray(r, 22) = Adodc1.Recordset.Fields(21)
DataArray(r, 23) = Adodc1.Recordset.Fields(22)
DataArray(r, 24) = Adodc1.Recordset.Fields(23)
DataArray(r, 25) = Adodc1.Recordset.Fields(24)
' اضافه های رو حذف کنید و ستون های خودتون رو به تعداد ستون های اکسس جایگزین کنید


Adodc1.Recordset.MoveNext
Next

Set Osheet = oBook.Worksheets(1)
Osheet.Range("A1 :Y1").Font.Bold = True

'A1:Y1 = منظور تعداد ستون های شما در اکسس هست

Osheet.Range("A1 :Y1").Value = Array("نام ستون اول","نام ستون دوم", .....")


Osheet.Range("A2").Resize(NumberOfRows, 25).Value = DataArray

'cmex.Filter =
CD.FileName = "Report"
CD.Filter = "(فايل اکسل(*.xls;*.xlsx) | (*.xls;*.xlsx)"
CD.ShowSave
oBook.SaveAs CD.FileName
DoEvents
Adodc1.Recordset.MoveFirst
MsgBox "انتقال اطلاعات با موفقيت انجام شد", 64, "Info"
oExcel.Quit
Else
MsgBox " هيچ داده براي انتقال موجود نيست", vbExclamation, ""
End If

vbhamed
چهارشنبه 27 آذر 1392, 00:05 صبح
سلام دوستان کسی راه حلی بلد نیست؟ لطفا کمک کنید من هم این مشکل رو دارم وقتی تعداد فیلدها زیاد میشه خیلی زمان میبره

سلام
پست شماره 6 همين تاپيك رو بخونيد

akbarg64
چهارشنبه 27 آذر 1392, 06:47 صبح
سلام.منم با جناب vbhamed (http://barnamenevis.org/member.php?10624-vbhamed) موافقم.جواب ايشون بهتره.و من خودم از همين روش استفاده ميكنم.

ایلیا آخوندزاده
چهارشنبه 12 شهریور 1393, 09:41 صبح
ولی من با آقای m.4.r.m (http://barnamenevis.org/member.php?247494-m-4-r-m)
موافقم این کد مرتب و کامل گزارش گیری میکنه.فقط نیاز به یک دیالوگ برای آدرس دهی کاربر داره موفق باشید.

vbhamed
چهارشنبه 12 شهریور 1393, 10:04 صبح
سلام

براي انجام يك كار راههاي مختلفي وجود داره كه با توجه به نياز از اونها استفاده ميشه
در راهي كه m.4.r.m (http://barnamenevis.org/member.php?247494-m-4-r-m) عزيز گذاشتن شما حتما بايد تعداد سطر و ستونهاي اطلاعات اكسل رو بدونيد ضمن اينكه حتما بايد اكسل روي سيستم كاربر نصب باشه چون عمل تبديل با استفاده از VBA انجام شده ولي در مورد vsFlexGrid هيچكدوم از اين محدوديتها رو نداريد

ایلیا آخوندزاده
شنبه 15 شهریور 1393, 11:49 صبح
البته آقای vbhamed
من قصد توهین به راه حل شما رونداشتم و بقول شما برای انجام یک کار راه های زیادی وجود داره و در هریک از راه ها هم ایراد وجود داره هم پوئن برنده. استفاده از راه حل ها بستگی به نوع کاربرد داره که کار من بیشتر با این راه سازگار بود.
باتشکر از شما و m.4.r.m و تمامی کاربرانی که راه حل هارو ارائه دادن.

vbhamed
شنبه 15 شهریور 1393, 20:53 عصر
سلام

اول اينكه من به هيچ عنوان همچين برداشتي نكردم كه شما قصد توهين به راه حل رو داشته باشيد !
دوم اينكه اينجا يك سايت علمي و براي همين طور بحث هاست تا در نهايت بهترين راه حل مشخص بشه، كسي راه حلي ارائه ميده و بقيه هم راه حل خودشون يا اگر نقدي يا مشكلي در راه حل بقيه ديدن اعلام مي‌كنند

موفق باشيد

ایلیا آخوندزاده
یک شنبه 16 شهریور 1393, 07:51 صبح
سلام

اول اينكه من به هيچ عنوان همچين برداشتي نكردم كه شما قصد توهين به راه حل رو داشته باشيد !
دوم اينكه اينجا يك سايت علمي و براي همين طور بحث هاست تا در نهايت بهترين راه حل مشخص بشه، كسي راه حلي ارائه ميده و بقيه هم راه حل خودشون يا اگر نقدي يا مشكلي در راه حل بقيه ديدن اعلام مي‌كنند

موفق باشيد

از شخصیت شما استاد بزرگوار مشخصه که هیچ وقت چنین برداشتی نمیکنید.
باتشکر فراوان از زحمات شما