powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сохранение списка в TXT
12 сообщений из 12, страница 1 из 1
Сохранение списка в TXT
    #38777394
sitton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Помогите, пожалуйста!

Есть список работников в Exel 2010 (порядковый номер, ФИО, номер счёт, сумма счёта, т. е. 4 столбца). Tго нужно загрузить в другую программу в виде txt. К несчастью стандартными средствами Exel это не получается , т. к. к файлу предъявлены требования: 1-ый столбец должен начинаться с первого символа, 2-ой с 5-го, 3-й с 51-го, и 4-й с 62-го.

К сожалению, программированием я пока не владею, а похожий пример или готовый макрос я найти не смог! Очень надеюсь на вашу помощь!

Всем заранее огромное спасибо!
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38777420
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое нахрен программирование? скоро для посчитать два плюс два будем программы писАть... дети цифрового века, блин.
Тупо добавь лист, собери на нём нужную тебе структуру...
Код: vbnet
1.
A1 = ЛЕВСИМВ(Лист1!A1 & ПОВТОР(" ";4);4) & ЛЕВСИМВ(Лист1!B1 & ПОВТОР(" ";46);46) & ...


И экспортируй, что получилось.
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38777433
An12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
самый быстрый способ - портируй текст в SQL в таблицу с полями nchar, потом сохраняй в txt.
самый долгий указан Akina. Делай макрос на обработку полей с добавлением пробелов каждой ячейке.
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38777484
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
An12самый долгий указан Akina. Делай макрос на обработку полейПри этом уёдет время только на интерактив (растяжку формул).An12самый быстрый способ - портируй текст в SQL в таблицуАга. И сначала надо месяц изучать язык и тестировать работу. При этомsittonпрограммированием я пока не владею
Задумайтесь над тем, как и что надо советовать...
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38777660
An12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А быстрых решений нету. Это вопрос к Биллу Гейтсу или кто-там сейчас рулит.
Сам сталкивался раньше с этой проблемой. на коленке написал макрос, который по выделенной колонке делал формат типа nchar в Excel. j - длина строки.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub stroka()
For Each i In Selection
    If i.Value = "" Then Exit Sub
    i.Value = CStr(i.Value)
    j = 32
    k = Len(i.Value)
    k1 = ""
    Do While k + Len(k1) < j
        k1 = k1 & " "
    Loop
    i.Value = i.Value & k1
    
    
Next
End Sub
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38777979
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
An12, микроскопом гвозди забивать, конечно, можно... но нужно ли?
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38778431
sitton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, но я совсем запутался. Пробовал использовать вот этот макрос:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
Option Explicit
Option Base 0

Sub expToFixedSmart()
    '$conditions
    Const I_HEADER& = 4&, S_FOOTER$ = "&#200;&#242;&#238;&#227;&#238;:", S_FORMAT$ = "#0.00"
    '$fuse
    Const I_MAX_BLANK& = 3&, I_MAX_ROW& = 1000&
    
    Dim f%, sExpFileName$
    Dim a, s$, s2$, k&, k2&, iLen&
    
    '$datatableconditions
    a = Array(6&, 13&, 37&)
    
    '$expfilename
    sExpFileName = Left$(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "_exp.txt"
    ChDrive Left$(ThisWorkbook.Path, 1)
    ChDir ThisWorkbook.Path
    
    
    f = FreeFile
    Open sExpFileName For Output Access Write As #f
    
    With ThisWorkbook.Worksheets(1)
        '$header
        For k = 1 To I_HEADER
            s = .Cells(k, 1).Value2
            Print #f, s
        Next k
        
        k = I_HEADER + 1: k2 = 0
        
        '$datatable
        Do Until _
            0 = StrComp(S_FOOTER, .Cells(k, 1).Value2) Or _
            I_MAX_ROW < k Or _
            I_MAX_BLANK < k2
            
            iLen = Len(.Cells(k, 1).Value2)
            If iLen > 0 Then
                'col#1
                s = .Cells(k, 1).Value2 & Space(a(0) - iLen)
                
                'col#2
                iLen = Len(.Cells(k, 2).Value2)
                s = s & .Cells(k, 2).Value2 & Space(a(1) - iLen)
                
                'col##3,4
                s = s & .Cells(k, 3): s2 = Format$(.Cells(k, 4), S_FORMAT)
                iLen = Len(s) + Len(s2)
                s = s & Space(a(2) - iLen) & s2
                
                k2 = 0
                
            Else:   s = "": k2 = k2 + 1
            End If
            
            Print #f, s
            k = k + 1
        Loop
        
        '$footer|$err
        If StrComp(S_FOOTER, .Cells(k, 1).Value2) = 0 Then
            s = .Cells(k, 1).Value2 & "  " & Format$(.Cells(k, 4).Value2, S_FORMAT)
        ElseIf I_MAX_BLANK < k2 Then
            s = "E: footer row not found, MAX_BLANK reached"
        Else
            s = "E: footer row not found, MAX_ROW reached"
        End If
        
        Print #f, s
    End With
    
    Close #f
    Shell "notepad " & sExpFileName, vbNormalFocus
    
End Sub

Он кое-как с ошибками запускается, но второй столбец (с текстом) вообще не показывает.

Если для поставленной задачи нужно для каждой строки из таблицы Exel писать свой маленький "алгоритм", то, будьте добры, покажите пожалуйста, хотя бы на примере первых двух строк!
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38778597
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ж тебе показал - задача решается одной формулой (несложной, но длинной). Что ж тебя всё в VBA несёт?
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38778606
An12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_FORMAT$ задан как число. Нужна проверка на число или текст.
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38778685
An12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Sub expToFixedSmart()
    '$conditions
    Const I_HEADER& = 4&, S_FOOTER$ = "&#200;&#242;&#238;&#227;&#238;:", S_FORMAT$ = "#0.00"
    '$fuse
    Const I_MAX_BLANK& = 3&, I_MAX_ROW& = 1000&
    
    Dim f%, sExpFileName$
    Dim a, s$, s2$, k&, k2&, iLen&
    
    '$datatableconditions
    a = Array(6&, 13&, 37&)
    
    '$expfilename
    sExpFileName = Left$(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "_exp.txt"
    ChDrive Left$(ThisWorkbook.Path, 1)
    ChDir ThisWorkbook.Path
    
    
    f = FreeFile
    Open sExpFileName For Output Access Write As #f
    
    With ThisWorkbook.Worksheets(1)
        '$header
        For k = 1 To I_HEADER
            s = .Cells(k, 1).Value2
            Print #f, s
        Next k
        
        k = I_HEADER + 1: k2 = 0
        
        '$datatable
        Do Until _
            0 = StrComp(S_FOOTER, .Cells(k, 1).Value2) Or _
            I_MAX_ROW < k Or _
            I_MAX_BLANK < k2
            
            iLen = Len(.Cells(k, 1).Value2)
            If iLen > 0 Then
                s = Cells(k, 1) & Space(4 - Len(Cells(k, 1))) & _
                    Cells(k, 2) & Space(46 - Len(Cells(k, 2))) & _
                    Format$(Cells(k, 3), "0,00") & Space(11 - Len(Format$(Cells(k, 3), "0,00"))) _
                    & Cells(k, 4)
            Else:   s = "": k2 = k2 + 1
            End If
            
            Print #f, s
            k = k + 1
        Loop
        
        '$footer|$err
        If StrComp(S_FOOTER, .Cells(k, 1).Value2) = 0 Then
            s = .Cells(k, 1).Value2 & "  " & Format$(.Cells(k, 4).Value2, S_FORMAT)
        ElseIf I_MAX_BLANK < k2 Then
            s = "E: footer row not found, MAX_BLANK reached"
        Else
            s = "E: footer row not found, MAX_ROW reached"
        End If
        
        Print #f, s
    End With
    
    Close #f
    Shell "notepad " & sExpFileName, vbNormalFocus
    
End Sub
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38778772
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
An12S_FORMAT$ задан как число. Нужна проверка на число или текст.
А в чём проблема?
Копируешь во временную переменную.
Убираешь начальные и хвостовые пробелы.
Потом проверяешь первый символ. Если тире - убираешь.
Потом проверяешь количество точек. Если более одной - проверка не пройдена. Если одна - убираешь.
Проверяешь, что в остатке только цифры. Если нет - проверка не пройдена.
Проверка пройдена.
...
Рейтинг: 0 / 0
Сохранение списка в TXT
    #38778794
sitton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
An12, Спасибо огромное!!!!!!!! )
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сохранение списка в TXT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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