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

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

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

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


И экспортируй, что получилось.
...
Рейтинг: 0 / 0
15.10.2014, 14:46
    #38777433
An12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
самый быстрый способ - портируй текст в SQL в таблицу с полями nchar, потом сохраняй в txt.
самый долгий указан Akina. Делай макрос на обработку полей с добавлением пробелов каждой ячейке.
...
Рейтинг: 0 / 0
15.10.2014, 15:15
    #38777484
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
An12самый долгий указан Akina. Делай макрос на обработку полейПри этом уёдет время только на интерактив (растяжку формул).An12самый быстрый способ - портируй текст в SQL в таблицуАга. И сначала надо месяц изучать язык и тестировать работу. При этомsittonпрограммированием я пока не владею
Задумайтесь над тем, как и что надо советовать...
...
Рейтинг: 0 / 0
15.10.2014, 16:40
    #38777660
An12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
А быстрых решений нету. Это вопрос к Биллу Гейтсу или кто-там сейчас рулит.
Сам сталкивался раньше с этой проблемой. на коленке написал макрос, который по выделенной колонке делал формат типа 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
15.10.2014, 21:13
    #38777979
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
An12, микроскопом гвозди забивать, конечно, можно... но нужно ли?
...
Рейтинг: 0 / 0
16.10.2014, 12:19
    #38778431
sitton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
Извините, но я совсем запутался. Пробовал использовать вот этот макрос:
Код: 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
16.10.2014, 13:52
    #38778597
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
Я ж тебе показал - задача решается одной формулой (несложной, но длинной). Что ж тебя всё в VBA несёт?
...
Рейтинг: 0 / 0
16.10.2014, 13:56
    #38778606
An12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
S_FORMAT$ задан как число. Нужна проверка на число или текст.
...
Рейтинг: 0 / 0
16.10.2014, 14:39
    #38778685
An12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
Код: 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
16.10.2014, 15:34
    #38778772
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
An12S_FORMAT$ задан как число. Нужна проверка на число или текст.
А в чём проблема?
Копируешь во временную переменную.
Убираешь начальные и хвостовые пробелы.
Потом проверяешь первый символ. Если тире - убираешь.
Потом проверяешь количество точек. Если более одной - проверка не пройдена. Если одна - убираешь.
Проверяешь, что в остатке только цифры. Если нет - проверка не пройдена.
Проверка пройдена.
...
Рейтинг: 0 / 0
16.10.2014, 15:54
    #38778794
sitton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение списка в TXT
An12, Спасибо огромное!!!!!!!! )
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сохранение списка в TXT / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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