Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2009, 19:22   #1
Maxximus
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 11
По умолчанию Excel VBA, Экспорт в txt, кодировка файла UTF-16 LE/UCS-2 Little Endian+еще один интересный вопрос

1. Есть программа в Excel VBA которая экспортирует данные в текстовый файл. Как экспортировать с помощью макросов в текстовый файл с кодировкой UTF-16 LE/UCS-2 Little Endian, или как средствами excel экспортнуть в txt с данной кодировкой.

2. Как реализовать с помощью Excel VBA?
Есть некая область ограниченная географическими координатами пример:
60.599600, 33.196300
61.315138, 34.011249
60.619674, 35.035055
60.599605, 33.190558
Необходимо выполнить проверку входит ли точка с координатами 60.539773, 33.525762 в данную область?

Умоляю помочь - вопрос жизни и смерти!!!
Maxximus вне форума Ответить с цитированием
Старый 16.08.2009, 19:51   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

1.
Судя по тому, что Вы до сих пор не получили ответа на этот вопрос на соседнем форуме, не так-то всё и просто.

В Excel у метода SaveAs нет параметра Encoding, который задавал бы кодировку текста.
Зато такой параметр есть у аналогичного метода в Microsoft Word
Цитата:
Encoding
Optional MsoEncoding. The code page, or character set, to use for documents saved as encoded text files. The default is the system code page.
Соответственно, Вы можете использовать Word для перекодировки текста.
То есть, средствами excel Вы формируете файл в стандартной кодировке, а потом используете Word для перекодировки (всё это можно сделать макросом из Excel, а Word даже не будет отображаться на экране)

2.
Реализовать, в принципе, несложно. Чистая геометрия.
Но надо знать, как Вы хотите использовать результаты вычислений, и откуда получать исходные данные - координаты 4 точек.
Можно написать пользовательскую функцию, которая в качестве параметров будет принимать координаты проверяемой точки, и координаты области, и возвращать логическое значение - входит указанная точка в заданную область, или нет.

Впрочем (вдруг кто знает), может, в Excel есть аналогичная встроенная функция?
EducatedFool вне форума Ответить с цитированием
Старый 16.08.2009, 20:16   #3
Maxximus
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 11
По умолчанию

За первый вопрос огромное мерси, чего то не подумал про Word, уперся в Excel. (просто танцую от радости).

По второму вопросу, необязательно присутствие 4 точек, их будет множество, ну или типа того.
Про геометрию понятно, но не совсем, когда фигура правильная мне все ясно, но если точек 100-200 и фигура неправильная.
Необходимо откординатить каждую область России жестко забив их в макрос(области). Затем поиск в столбцах с координатами, если точка соответствует заданной области она сохраняется/добавляется в конец txt файла с названием данной области (moskovskay_obl.txt) и так весь файл exel экспортируется по координатам в разные txt файлы, с соответстствующими названиями областей.
Maxximus вне форума Ответить с цитированием
Старый 16.08.2009, 21:28   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Необходимо откординатить каждую область России жестко забив их в макрос(области)
Как Вы себе это представляете?
Или это уже сделано - есть список координат каждого региона?

Точек может быть сколько угодно, причём совсем необязательно, чтобы они образовывали правильный многоугольник.
Областей не так уж и много, поэтому макрос практически мгновенно проверит принадлежность указанной точки всем заданным областям.

Координаты областей лучше забивать не в макрос, а поместить их в ячейки листа Excel. Например, каждый столбец будет содержать название и координаты одной из областей.
Желательно, чтобы название области (в первой ячейке каждого столбца) совпадало с именем текстового файла, в который надо помещать координаты точек.

Будет файл со списком координат областей, и лист со списком координат точек, которые нужно раскидать по текстовым файлам, - будем думать, как это реализовать в виде кода.

А с кодировкой потом что-нибудь придумаем.
EducatedFool вне форума Ответить с цитированием
Старый 16.08.2009, 21:37   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вам нужна замкнутая область.

Второй вопрос относиться к векторной геометрии.
Проще этот вопрос решить средствами Автокада
Установить Автокад,лучше 2008
Пишеться макрос на Lisp для формирования полилинии по данным из текстового файла,подобная задача расматриваеться здесь
http://www.caduser.ru/forum/index.ph...ID=23&TID=8405
Получится замкнутая область,не трудно будет определить ,куда относиться заданная точта.
Из Автокада есть возможность вывода в Excell
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 16.08.2009, 22:22   #6
Maxximus
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 11
По умолчанию

Цитата:
Как Вы себе это представляете?
Или это уже сделано - есть список координат каждого региона?
нет это еще не сделано, но делается одна область минут за 20 в OZI.
те точки что я привел, это треугольник где-то в карелии (потом я расширю его до размеров республики)
Цитата:
Координаты областей лучше забивать не в макрос, а поместить их в ячейки листа Excel
Я тоже об этом подумал, так как описывать кучу координат, в макросе это тяжко, в озике экспортну, получу текстовый файл, можно сразу импортнуть в ексель - легко. Вот конечно пока не понимаю как в замкнутой области осуществить поиск данной точки.
вот код из программы:
В Форме...
Код:
Private Sub ComboBox1_Change()
If ComboBox1.Value = "Республика Адыгея (Адыгея)" Then
Label1.Caption = "01"
region = "adigea"
End If
If ComboBox1.Value = "Республика Башкортостан" Then
Label1.Caption = "02"
 region = "bashkortostan"
End If
в модуле:
Код:
Sub Razbivkaregion()
 dat1 = Format(Now(), "dd-mm-yyyy")
 tim = Format(Now(), "hmm")
Fntxt = ActiveWorkbook.Path & "\region\" & UserForm1.region & "_" & dat1 & "_" & tim & ".txt"
' ---------------------------------------------------------------------
Select Case UserForm1.region
Case "adigea" ' Республика Адыгея (Адыгея)
MsgBox UserForm1.region & Chr(13) & " Экспортировано:" & " записей"
If Cells(4, 2) = "" Then
MsgBox "Внимание файл пустой экспортировать нечего!"
Exit Sub
End If
x = "30.97567"
y = "59.48812"
Cells(4 - 1, 1).Select
n = Selection.CurrentRegion.Rows.Count
Cells.Find(What:=x, After:=ActiveCell, LookAt:= _
xlPart, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
For i = 3 To n + 2
i = CurrentRegion.Rows.Count
Call saveregion
Next
Код:
Private Sub saveregion()
Open Fntxt For Append As #1
Print #1, Replace(Cells(i, 2).Value, ",", "."); _
","; Replace(Cells(i, 3).Value, ",", "."); ","; Replace(Cells(i, 4).Value, "xxx", "xxx"); _
","; Replace(Cells(i, 5).Value, "xxx", "xxx"); ","; Replace(Cells(i, 6).Value, "xxx", "xxx") _
; ","; Replace(Cells(i, 7).Value, "xxx", "xxx")

Close #1
End Sub
doober, спасибо Вам за совет но к сожалению это все необходимо реализовать именно в Excele

Цитата:
А с кодировкой потом что-нибудь придумаем.
Пока сделал через Word как Вы и посоветовали, конечно можно написать макрос и перекодировать каждый символ при экспорте, но это уже вопрос по мне вообще не решаемый, если кто поможет...
Вложения
Тип файла: rar MZM_speedcam.rar (132.7 Кб, 26 просмотров)

Последний раз редактировалось Maxximus; 17.08.2009 в 00:43. Причина: добавил файл
Maxximus вне форума Ответить с цитированием
Старый 18.08.2009, 12:05   #7
Maxximus
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Будет файл со списком координат областей, и лист со списком координат точек, которые нужно раскидать по текстовым файлам, - будем думать, как это реализовать в виде кода.
Файл со списком координат области лист (regions), прилепил и полностью программу с координатами спидкамов.
Нашел легкий на мой взгляд алгоритм проверки попадания точки в область:
Цитата:
Из проверяемой точки строится луч (отрезок, гарантированно выходящий за пространство координат фигуры).
Считается количество пересечений этого луча со всеми сторонами фигуры. Если количество этих пересечений четное или 0 - точка лежит вне фигуры. Соответственно, если количество пересечений нечетное - точка лежит В фигуре.
Теперь не могу понять как это все связать макросом.
Maxximus вне форума Ответить с цитированием
Старый 18.08.2009, 13:27   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Maxximus, я в своё время использовал другой способ определения принадлежности точки региону. Он требует довольно значительной подготовки, но потом работает очень быстро.
1.Берём растровую карту высокого (достаточного) разрешения.
2.Раскрашиваем все регионы в разные цвета.
3.Формируем байтовый массив по растру с цветом/индексом региона
4.Пишем функцию переводящую географические координаты в адрес
точки нашего растра. Посмотрите любой справочник по картографии ...
5.По координатам выбираем элемент нашей матрицы и сразу имеем индекс региона. Кстати, матрицу можно при желании реализовать как
внешний бинарный файл с прямым доступом.
Aent вне форума Ответить с цитированием
Старый 18.08.2009, 22:48   #9
Maxximus
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 11
По умолчанию

Aent а попроще никак нельзя, к сожалению не сильно продвинут в VBA? да и высшая математика изучалась давно, но постараюсь быть прилежным учеником. Решение конечно оригинальное и мне очень нравится, вот если бы Вы помогли исходниками я бы разобрался что да как. спасибо.
Программа моя будет работать для всех автомобилистов страны, предупреждая их об опасностях в их GPS. Так, что помогая мне вы помогаете многим людям.

Последний раз редактировалось Maxximus; 18.08.2009 в 23:33.
Maxximus вне форума Ответить с цитированием
Старый 19.08.2009, 01:25   #10
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Цитата:
Программа моя будет работать для всех автомобилистов страны, предупреждая их об опасностях в их GPS
Спаси нас, господи, от GPS cофта написанного на Excel VBA.
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще один массив.. Но интересный :) Наталья Ивановна Microsoft Office Excel 8 27.05.2009 23:10
Кодировка UCS-2 nimf Общие вопросы Delphi 1 21.01.2009 12:44
кодировка UTF-8 nimf Общие вопросы Delphi 4 18.01.2009 19:25
UTF-8 кодировка OrdJONY Общие вопросы Delphi 2 23.03.2008 16:56
Еще один вопрос с SQL-ом фЁдОр БД в Delphi 27 22.10.2007 12:42