Процес перетворення з журналу MS Excel,© до ADIF відносно проста і може бути зроблено, використовуючи трохи програмування VBA. Завдяки цій посилання може звернутися до специфікації ADIF 1.0 який використовується в більшості журналів, Важливо, що ви читаєте цей документ.
Для запуску процесу перетворення на основі цього уроку починається зі створення файлу у форматі MS Excel©. У першому білизни Напишіть ім'я поля, які ви хочете імпортувати (Будь ласка, перевірте ADIF 1.0 назви полів). Навіть у першому рядку, тип “ADIF RAW” останню клітинку, це де текст буде написаний в ADIF.
Лист повинен виглядати наступним чином (але як і раніше немає даних по лінії 2). Хоча формат ADIF не визначає мінімальну кількість полів, принаймні ваш QSO журнал повинен мати значення для виклику, QSO_Date, Time_On, Режим зони Е.
Потім виберіть весь лист і формат осередках як текст.
Збережіть файл як xls2adi.xls (лист у форматі MS Excel©)
Запишемо тепер і вставити код в VBA. Зайдіть в меню Сервіс / Макрос і клацніть Редактор Visual Basic (Alt F11).
У редакторі VBA двічі клацніть "ThisWorkbook’ , Яка знаходиться в 'Project – VBAProject ". Тут ви можете отримати головний блок коду, який буде виконуватися, коли ви відкриваєте цей файл заново.
Блок коду, який слід встановлює деякі змінні та виклики функцій fCampoAdifValido (лінія 05) , Що буде перевіряти, якщо ім'я поля, яке знаходиться на першій лінії відповідає специфікації ADIF. Якщо всі імена полів правильне функціонування викликає процедуру pEscreveAdif (лінія 09) напишу увійдіть ADIF, Якщо поле має неприпустиме ім'я функція показує повідомлення про помилку (лінія 07) і закінчується.
Копіювання / вставка або введіть наступний код:
Private Sub Workbook_Open() As Boolean Dim bNomeDoCampoValido (conLinhaInicial) sUltimaColuna = fQualEAUltimaColuna(conColunaInicial) bNomeDoCampoValido = fCampoAdifValido(conColunaInicial, sUltimaColuna) Якщо bNomeDoCampoValido = False Тоді ("Знайдено неприпустимі імена полів" & vbCrLf & "Видалити колонки, заповнені в червоному!") Ще
У редакторі VBA, натисніть кнопку Додати / Модуль. У цьому модулі буде Частина коду, який викликається основний блок.
Константи conLinhaInicial (лінія 02 Наступний блок) і conColunaInicial (лінія 03 Наступний блок) визначити лінію 2 (Таблиця) у першій реєстрації і що стовпець (Таблиця) Перше поле.
Опції fQualEAUltimaLinha (лінія 08 Наступний блок) і fQualEAUltimaColuna (лінія 17 Наступний блок) визначатиме останніх рядки і стовпці даних. Це вимагає порожня клітинка означає кінець запису журналу.
Функція fCampoAdifValido (лінія 05 попередній блок) Тести дії імені поля. Select Case циклу "sNomeDoCampo’ (лінія 31 Наступний блок) більше полів можуть бути додані відповідно до специфікацією ADIF.
Процедура pEscreveAdif (лінія 09 попередній блок) буду писати текст у стовпець, який має ADIF “ADIF RAW” Перший рядок. Ця процедура береться з поля Ifen QSO_DATE, дві точки поля і додав, М TIME_ON в кінці поля ГРУПА. Щоб зробити це більш макросів можуть бути накладені суворіші умови для перевірки даних у цій процедурі.
Копіювання / вставка або введіть наступний код в модуль:
Option Explicit 2 Public Const conColunaInicial As String = "A" As Integer громадської iUltimaLinha (iPrimeiraLinha As Integer) As Integer (Folha1.Cells(iValRecebido, "A")) > 0 iValRecebido = iValRecebido + 1 Петля - 1 End Function (Рядок sPrimeiraColuna) Струнний (sPrimeiraColuna) Do While Льон(Folha1.Cells(1, Chr(iValRecebido))) > 0 iValRecebido = iValRecebido + 1 Петля (iValRecebido - 1) End Function (Рядок sPrimeiraColuna, sUltimaColuna As String) Булеві (sPrimeiraColuna) Для Asc(sUltimaColuna) sNomeDoCampo = LCase(Folha1.Cells(1, iColunaCorrente - 64)) Select Case sNomeDoCampo "гурту": fCampoAdifValido = True "виклик": fCampoAdifValido = True "CQZ": fCampoAdifValido = True "спосіб": fCampoAdifValido = True "qso_date": fCampoAdifValido = True "rst_rcvd": fCampoAdifValido = True "rst_sent": fCampoAdifValido = True "SRX": fCampoAdifValido = True "STX": fCampoAdifValido = True "time_on": fCampoAdifValido = True "ADIF сировини" fCampoAdifValido = True - 64 Case Else (1, iColunaCorrente - 64).Interior.Color = RGB(255, 0, 0) fCampoAdifValido = False () As Integer Dim iLinhaCorrente "" Для iColunaCorrente = Asc(conColunaInicial) Для Asc(sUltimaColuna) - 1 Якщо LCase(Folha1.Cells(1, Chr(iColunaCorrente))) = "гурту" Потім (iLinhaCorrente, Chr(iColunaCorrente)) & "M" Ще (Folha1.Cells(1, Chr(iColunaCorrente))) = "qso_date" Потім (Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)), "-", "") Ще (Folha1.Cells(1, Chr(iColunaCorrente))) = "time_on" Потім (Folha1.Cells(iLinhaCorrente, Chr(iColunaCorrente)), ":", "") Ще (iLinhaCorrente, Chr(iColunaCorrente)) End If & "<" & LCase(Folha1.Cells(1, Chr(iColunaCorrente))) & ":" & Тільки(sTextoNaCelula) & ">" & sTextoNaCelula (iLinhaCorrente, iAdifRaw) = SLinhaEmAdif & "<" & "ПНП" & ">" Наступний
У меню Файл / Зберегти xls2adi.xls і закрити редактор VBA.
Тепер скопіюйте дані в MS Excel файлів© Ви хочете перетворити у відповідні стовпці, серйозні вийти в кінці і MS Excel©.
Можливо, вам доведеться змінити настройки для MS Excel sugurança© запускати макроси, При необхідності перейдіть в меню Сервіс / Макрос і клацніть Безпека, вибрати більш низький рівень. Це була написана для MS Excel© ет MS Windows XP© (як в португальській мові). Якщо ви будете використовувати цей код на іншу мову, наприклад, англійською мовою, Sheet1 замінити терміном "’ POR "Лист1’
Коли ви двічі клацніть файл xls2adi.xls, код, який ви тільки що ввели, буде виконаний і колонки “ADIF RAW” Наша Вхід у форматі ADIF.
Тепер, щоб закінчити, виберіть вмісту стовпців “ADIF RAW” електронної copie (Ctrl C), Відкрийте Блокнот (Блокнот) електронної Коул (Ctrl V). Збережіть файл з розширенням додатковими.
Цей приклад коду може вільно використовувати, Ви можете вільно використовувати. Це дуже простий приклад того, що може бути зроблено за допомогою VBA (Візуальний Бейсік для додатків). Доповнення цей код перевірки з більш точним, особливо в qso_date полів’ е 'time_on ", де форматів повинні відповідати специфікації ADIF. Якщо ви помітили помилку або у вас є питання, не соромтеся коментар. Я сподіваюся, що стаття буде корисна.