Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с экспортом в excel, ? 
:(
    Опции темы
ArtNeoX
Дата 19.2.2006, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

Репутация: нет
Всего: нет



На форме DataGrid кнопка для экспорта содержимого базы данных в excel
При первом нажатии кнопки cmdExcel на тулбаре, содержимое базы данных отправляется в excel, устанавливается шрифт заголовка, производится автозамена _ на пробел в заголовке таблицы.
При повторном нажатии кнопки cmdExcel данные экспортируются но форматирование текста не происходит.
Даже если закрыть Excel перед повторным нажатием.
Почему?

Код

Dim iFieldCount As Integer
Dim sMessage As String
Dim avRows As Variant
Dim excelVersion As Integer


Код

Select Case Button.Key
Case "cmdExcel"
On Error Resume Next
Dim iIndx As Integer
Dim iRowIndex As Integer
Dim iColIndex As Integer
Dim iRecordCount As Integer

'экспорт в excel 
If adoPrimaryRS.State = adStateOpen Then
adoPrimaryRS.Close
End If
sqlName = "SELECT X1 AS Дата, X2 AS Время_начала, X03 AS Время_окончания FROM  Таблица1 ORDER BY X3,X4 ASC"
adoPrimaryRS.Open sqlName
adoPrimaryRS.Requery
avRows = adoRecordset.GetRows()
iRecordCount = UBound(avRows, 2) + 1
iFieldCount = UBound(avRows, 1) + 1
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add
Set objTemp = objExcel
iRowIndex = 1
iColIndex = 1
For iColIndex = 1 To iFieldCount
  With objExcel.Cells(iRowIndex, iColIndex)
     .Value = adoRecordset.Fields(iColIndex - 1).Name
          
    ' выбор шрифта, жирности и размера
    With .Font
       .Name = "Times New Roman"
       .Bold = True
       .Size = 10
     End With
  End With
 Next

'-- memory management --
adoRecordset.Close
Set adoRecordset = Nothing

'-- Just add data --
With objExcel
  For iRowIndex = 2 To iRecordCount + 1
   For iColIndex = 1 To iFieldCount
    .Cells(iRowIndex, iColIndex).Value = avRows(iColIndex - 1, iRowIndex - 2)

' установить высоту строк
Rows(iRowIndex - 1).RowHeight = 25.5
      Next
  Next
  
  ' форматируем всю таблицу устанавливая ширину столбцов и перенос предложений по строкам
    Cells.Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.ColumnWidth = 20
End With

'выровнять колонки по ширине текста
objExcel.Cells(1, 1).CurrentRegion.EntireColumn.AutoFit

 ' Замена значка _ в заголовке
Rows("1:1").Select
Selection.Replace What:="_", Replacement:=" ", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Range("A1").Select

End Select
End Sub

PM MAIL   Вверх
kulibin
Дата 20.2.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: 2
Всего: 3



попробуй вот так открывать Excel:
Код

On Error Resume Next
Set exl = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
    Set exl = CreateObject("Excel.Application")
    Err.Clear
    Else
End If
On Error GoTo 0

и так и оставь "On Error GoTo 0" после этого - а как иначе то ошибку увидеть. а так я шото ничего подозрительного не заметил пока.
зачем сразу objExcel.Visible = True делаеш? - или хоть бы screenupdate=false бы поставил - зачем пользователю смотреть как оно там мельтешит.
поставь после открытия Excel
Код

exl.Visible = True
exl.Cursor = xlWait
exl.ScreenUpdating = False

ну и в конце set exl=nothing у тебя то где? а надо.
вобщем в конце у тебя должно быть
Код

exl.Cursor = xlDefault
exl.ScreenUpdating = True
Set exl = Nothing

если не вылечиш - свисти, ещё посмотрим что можно. а вообще я думаю как токо On Error Resume Next уберёш - так сразу и увидиш где жук сидел.
PM MAIL WWW ICQ   Вверх
ArtNeoX
Дата 21.2.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

Репутация: нет
Всего: нет



Код
 
Private Sub Refreh()
 Dim db As Connection
  Set db = New Connection
  db.CursorLocation = adUseClient
  ' Открытие базы
 db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=Files\Base.mdb;"
  Set adoPrimaryRS = New Recordset
  ' Отобразить данные по дате и времени
  adoPrimaryRS.Open "SELECT X16,X17,X04,X26,X27,X09,X13 FROM Таблица1 union all SELECT X16,X17,X04,X26,X27,X09,X13 FROM Таблица2 ORDER BY X16,X17 ASC", db, adOpenStatic, adLockOptimistic
  Set grdDataGrid.DataSource = adoPrimaryRS
  Set adoRecordset = adoPrimaryRS
  mbDataChanged = False
End Sub


При экспорте в excel
Код

sqlName = "SELECT X16 AS Дата, X17 AS Время, X04 AS Фамилия, X26 AS Имя, X27 AS Отчество, X09 AS Адрес, X13 AS Сумма FROM  Таблица1 union all SELECT X16 AS Дата, X17 AS Время, X04 AS Фамилия, X26 AS Имя, X27 AS Отчество, X09 AS Адрес, X13 AS Сумма FROM Таблица2 ORDER BY X16, X17 ASC"

ничего не происходит

если укажу
Код
 
sqlName = "SELECT X16 AS Дата, X17 AS Время, X04 AS Фамилия, X26 AS Имя, X27 AS Отчество, X09 AS Адрес, X13 AS Сумма FROM  Таблица1 union all SELECT X16 AS Дата, X17 AS Время, X04 AS Фамилия, X26 AS Имя, X27 AS Отчество, X09 AS Адрес, X13 AS Сумма FROM Таблица2"

то экспортируется но без сортировки

как экспортировать данные в том виде в каком они открываются, то есть с сортировкой.


PM MAIL   Вверх
kulibin
Дата 21.2.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: 2
Всего: 3



ничего не понял smile - чего не происходит то?
там было у тебя перед экспортом в массив сливание рекордсета - может из-за этого - я так не делал - точно не скажу. Зачем ты так делаеш тоже не знаю - так быстрее наверное?
Попробуй сразу из рекордсета печатать - перебирай его мувнекстом. Хотя если сильно много данных - наверное массив быстрее перебирается - не знаю, пробуй.
Зачем поля то в бд так пообзывал? никогда больше так не делай smile.
С форматированием разобрался?
PM MAIL WWW ICQ   Вверх
ArtNeoX
Дата 22.2.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 23.10.2005

Репутация: нет
Всего: нет



я сделал проще, в таблице отображаются данные с сортировкой, по любым столбцам, затем перекидывается в excel а в excel форматируется по алфавиту по 1 столбцу.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.6964 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.