powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Странность при экспорте в Excel
9 сообщений из 9, страница 1 из 1
Странность при экспорте в Excel
    #39740640
DimaSh5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите с проблемой. При выгрузке в Excel некоторые данный "прирастают мусором". Например в Access`е внесено значение "561,4", а в Excel выгружается "561,40002"(пример в приложенной картинке). Данные не высчитываемые, забивались руками.

Код на экспорт в шаблон:

Private Sub Выгрузка_в_EXEL_Click()
'Объявляем переменные

Dim rst As Object
Dim xlApp As Object
Dim xlWb As Object
Dim xlWs As Object
Dim recArray As Variant

Dim strSQL As String
Dim fldCount As Integer
Dim recCount As Long
Dim iCol As Integer
Dim iRow As Integer


' Создать экземпляр Excel и добавить книгу
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Open(CurrentProject.Path & "\Шаблоны\Карты_изоляции\171201\В_вводы.xlsx")
Set xlWs = xlWb.Worksheets("Ввод")

' Вывести Excel на экран позволить пользователю управлять временем работы Excel
xlApp.Visible = True
xlApp.UserControl = True

' Скопировать имена полей в первую строку листа
'fldCount = rst.Fields.Count
'For iCol = 1 To fldCount
' xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
'Next

' Проверить версию Excel
If Val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then
'EXCEL 2000,2002,2003 или 2007: используется метод CopyFromRecordset

' Скопировать набор записей на лист, начиная с ячейки A21
xlWs.Cells(21, 1).CopyFromRecordset rst
'Примечание. При использовании метода CopyFromRecordset произойдет сбой, если набор записей
'содержит поле объекта OLE или массив данных, таких как
'иерархические наборы записей

Else
'EXCEL 97 или более ранней версии: Будет использоваться метод GetRows, а затем массив будет скопирован в Excel

' Скопировать набор данных в массив
recArray = rst.GetRows
'Примечание. Метод GetRows возвращает массив, индексируемый с 0, первая
'размерность которого содержит поля, а вторая
'содержит записи. Массив будет транспонирован таким образом, чтобы
'первая размерность содержала записи, обеспечивая
'правильное отображение данных при копировании в Excel

' Определить количество строк

recCount = UBound(recArray, 2) + 1 '+ 1, поскольку массив индексируется с 0


' Проверить массив на наличие недопустимого содержимого при
' копировании массива в лист Excel
'For iCol = 0 To fldCount - 1
' For iRow = 0 To recCount - 1
' ' Обработка полей Date (дата)
' If IsDate(recArray(iCol, iRow)) Then
' recArray(iCol, iRow) = Format(recArray(iCol, iRow))
' ' Обработка полей объектов OLE или полей массивов
' ElseIf IsArray(recArray(iCol, iRow)) Then
' recArray(iCol, iRow) = "Array Field"
' End If
' Next iRow 'следующая запись
'Next iCol 'следующее поле

' Транспонировать и скопировать массив в лист,
' начиная с ячейки A21
xlWs.Cells(21, 1).Resize(recCount, fldCount).Value = _
TransposeDim(recArray)
End If

' Автоматически подобрать ширину столбцов и высоту строк
'xlApp.Selection.CurrentRegion.Columns.AutoFit
'xlApp.Selection.CurrentRegion.Rows.AutoFit

' Закрыть объекты ADO
rst.Close
'cnt.Close
Set rst = Nothing
'Set cnt = Nothing

' Освободить ссылки на Excel
Set xlWs = Nothing
Set xlWb = Nothing

Set xlApp = Nothing

End Sub

Function TransposeDim(v As Variant) As Variant
' Пользовательская функция для транспонирования массива, индексируемого с 0 (v)

Dim X As Long, Y As Long, Xupper As Long, Yupper As Long
Dim tempArray As Variant

Xupper = UBound(v, 2)
Yupper = UBound(v, 1)

ReDim tempArray(Xupper, Yupper)
For X = 0 To Xupper
For Y = 0 To Yupper
tempArray(X, Y) = v(Y, X)
Next Y
Next X

TransposeDim = tempArray


End Function
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740642
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaSh5555, то что ты видишь в формах и то что хранится в таблицах зачастую несколько отличается друг от друга (и порой значительно!). Обрати внимание на свойство Формат и в таблице и у полей формы.
В данном случае Access тебе показывает только заказанное (один или три) количество знаков после запятой. А в Excel сбрасываются истинные значения.

Такие странные числа (по мнению многих кто не сталкивался с машинной обработкой) у тебя получились видимо при расчётах (или это вычисляемые поля). Почитай как машина хранит числа (обрати внимание на Single и Double ).

Чтобы избежать такого тебе нужно самому округлять числа (ф-ция Round ) или усекать числа до требуемого кол-ва знаков после запятой. Самописных функций для усечения или специального округления ты во множестве найдёшь на страницах данного форума.
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740643
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740647
DimaSh5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,
в том-то и дело что данные в таблицы Access`а занесены в ручную (не импортировались, не высчитывались), все поля "Одинарные с плавающей точкой". Данных не много, заносил сам.
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740650
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaSh5555, читай по ссылке, там объяснено. Округляй или усекай в коде. Можно форматировать в Excel.
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740652
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaSh5555все поля "Одинарные с плавающей точкой".Да, и почему выбран этот тип? А не "Двойное с плавающей точкой" ( Double ) хотя бы.
По коду . Там всё практически можно выкинуть (больше половины точно!).
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740665
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaSh5555все поля "Одинарные с плавающей точкой"
Вот из-за этого и мусор. В Экселе нет такого типа, преобразование добавляет погрешность.
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740671
DimaSh5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо.
Решилось, заменой размера поля с "Одинарные с плавающей точкой" на "Действительное".
...
Рейтинг: 0 / 0
Странность при экспорте в Excel
    #39740715
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaSh5555Всем спасибо.
Решилось, заменой размера поля с "Одинарные с плавающей точкой" на "Действительное".А еще есть тип денежный,формат основной-почитайте про плавающую точку(чисто "компьютерное" понятие) и,наверное,поймете почему так происходит
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Странность при экспорте в Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]