Вставить два необработанных столбца из excel

Привет, я хочу вставить некоторые данные из файла excel, я понятия не имею, как это сделать. поэтому файл excel выглядит следующим образом:

Empid| 1/01/2019|2/01/2019 | 3/01/2019
-------------------------------------------
1    |    A     |    B     |    A
2    |    B     |    A     |    B
3    |    B     |    C     |    C
4    |    A     |    A     |    A

а буквы {A , B , C} обозначают тип смены, я хочу вставить таблицу из файла excel в базу данных, чтобы она выглядела так:

Empid | Date     | Shift
---------------------
 1    |1/01/2019 | A
 1    |2/01/2019 | B
 1    |3/01/2019 | A
 2    |1/01/2019 | B
 2    |2/01/2019 | A
 2    |3/01/2019 | B
 3    |1/01/2019 | B
 3    |2/01/2019 | C
 3    |3/01/2019 | C
 4    |1/01/2019 | A
 4    |2/01/2019 | A
 4    |3/01/2019 | A

большое спасибо.

Звучит круто. Дайте нам знать, когда вы столкнетесь с конкретной проблемой. Мы здесь не для того, чтобы писать код для вас.

Qirel 30.01.2019 11:39

спасибо :) извините за беспокойство.

hady alzpen 30.01.2019 11:42

Может быть, взгляните на Php офис. Это будет нелегко понять, но это, вероятно, поможет вам

Eugene Anisiutkin 30.01.2019 11:45

Спасибо, я сделаю это сейчас, по крайней мере, теперь у меня есть отправная точка :)

hady alzpen 30.01.2019 11:49

Недавно я написал код для чего-то очень похожего. stackoverflow.com/questions/54252775/…

Variatus 30.01.2019 11:55

Потрясающе Спасибо ^_^ .

hady alzpen 30.01.2019 12:00

При сохранении данных в реляционной базе данных обязательно используйте правильные типы данных для этих данных.

Strawberry 30.01.2019 12:12

@Variatus Код работал отлично, так как я хотел еще одну вещь, которую мне нужно добавить, он дал мне empid с Shift Column. Мне также нужна дата с ними, как я могу это сделать, еще раз большое спасибо.

hady alzpen 03.02.2019 12:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот код, измененный в соответствии с вашими целями.

Sub TransposeData()

    Const EmpidClm As String = "A"              ' change as applicable
    Const DateClm As String = "B"
    Const ShiftClm As String = "C"

    Dim Rng As Range
    Dim Arr As Variant, Pos As Variant
    Dim Rl As Long, Cl As Long
    Dim R As Long, C As Long
    Dim i As Long

    With ActiveSheet
        Cl = .UsedRange.Columns.Count - .UsedRange.Column + 1
        Rl = .Cells(.Rows.Count, Columns(EmpidClm).Column).End(xlUp).Row
        Set Rng = Range(.Cells(1, EmpidClm), .Cells(Rl, Cl))
    End With
    Arr = Rng.Value
    ReDim Pos(1 To (UBound(Arr) * UBound(Arr, 2)), 1 To 3)

    i = 1
    For C = 1 To 3
        Pos(i, C) = Array("Empid", "Date", "Shift")(C - 1)
    Next C

    For R = 2 To UBound(Arr)
        For C = 2 To UBound(Arr, 2)
            i = i + 1
            Pos(i, 1) = Arr(R, 1)
            Pos(i, 2) = Arr(1, C)
            Pos(i, 3) = Arr(R, C)
        Next C
    Next R

    R = Rl + 5                                  ' write 5 rows below existing data
    Set Rng = ActiveSheet.Cells(R, EmpidClm).Resize(i, 3)
    Rng.Value = Pos
End Sub

Другие вопросы по теме