Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Странность при экспорте в Excel / 9 сообщений из 9, страница 1 из 1
30.11.2018, 06:49
    #39740640
DimaSh5555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при экспорте в Excel
Подскажите с проблемой. При выгрузке в 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
30.11.2018, 07:16
    #39740642
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при экспорте в Excel
DimaSh5555, то что ты видишь в формах и то что хранится в таблицах зачастую несколько отличается друг от друга (и порой значительно!). Обрати внимание на свойство Формат и в таблице и у полей формы.
В данном случае Access тебе показывает только заказанное (один или три) количество знаков после запятой. А в Excel сбрасываются истинные значения.

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

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


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