Я должен использовать веб-сайт, чтобы экспортировать данные в формате XLS, быть преобразованным в CSV, быть выведенным в базу данных MySQL.
Моя проблема состоит в том, что это средство экспорта POS рассматривает возвраты каретки в исходных данных как новые поля, так, чтобы файл Excel был путаницей:
Пример:
[Name] [Age] [Employment History] // Excel File:
Smith, John 30 2005-2006 Bennigan's // row 1
2006-2007 Shenanigan's // row 2
2007-2008 Grizzlebee's // row 3
Smith, Karen . . . // row 4
Это полностью effs мое преобразование CSV с одним шагом. Стандартная команда слияния не полезна, потому что она отбрасывает все данные кроме первого поля.
Единственное решение, которое я нашел, состоит в том, что я могу вставить смежный столбец, объединить соответствующие строки, связать те 3 строки в блок постслияния во втором столбце и затем удалить оригинал. Это жестоко, почти невозможно интенсивно временем все же.
У кого-либо есть лучший способ решить проблему? Веб-средством экспорта POS управляет другая компания и полностью из моих рук...
Редактирование для добавления "корректного" примера:
[Name] | [Age] | [Employment History] | // Excel File:
______________|__________|__________________________|__
Smith, John | 30 | 2005-2006 Bennigan's | // row 1
| | 2006-2007 Shenanigan's |
| | 2007-2008 Grizzlebee's |
______________|__________|__________________________|___
Smith, Karen | 25 | 2001-2010 Ma Bell | // row 2
_____________|__________|__________________________|___
Согласно нашему обсуждению в комментариях, вот макрос, который я думаю, должен достигнуть того, что Вы после. Очевидно, протестируйте его на скопированных данных сначала в случае, если что-то плохо происходит.
Надо надеяться, единственная вещь, которую необходимо будет скорректировать, colToMerge
постоянный около вершины, для соответствия, какой бы ни столбец данные для слияния, оказывается, находится в.
Я только что определил Excel 2007 в Вашем заголовке вопроса, так обратите внимание на то, что я записал это в 2003.
Надо надеяться, это должно все еще работать, потому что это только делает очень простое перемещение и управление значением ячейки. Сообщите мне, не делает ли это, и я скорректирую его для Excel 2007, после того как я дома этим вечером.
Sub MergeEmploymentCol()
'PARAMETER: The column number you are merging. A=0,B=1,etc
Const colToMerge = 2
'First unmerge everything
Cells.UnMerge
'Select First "valid" row, done manually incase top rows are packed together
Range("A1").Select
Do While ActiveCell.Value <> 0
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
'Some variables
Dim thisRow As Integer, nextRow As Integer, i As Integer
Do While ActiveCell.Value <> 0
'Only need to merge if next row is blank
If (ActiveCell.Offset(1, 0).Value = 0) Then
'Get the row numbers for this valid row and the next valid row
thisRow = ActiveCell.Row
Selection.End(xlDown).Select
If (ActiveCell.Value <> 0) Then
nextRow = ActiveCell.Row
Else
'must be last row - no valid rows below this one
'special handling to find correct row
ActiveCell.Offset(0, colToMerge).Select
Selection.End(xlUp).Select
nextRow = ActiveCell.Row + 1
ActiveCell.Offset(0, -colToMerge).Select
'Exit if this last valid row has no duplicates
If (thisRow + 1 = nextRow) Then
Exit For
End If
End If
Selection.End(xlUp).Select
'Merge the data between here and the next valid row
Dim combinedData As String
combinedData = ""
For i = 0 To (nextRow - thisRow) - 1
combinedData = combinedData & ActiveCell.Offset(i, colToMerge).Value & Chr(10)
Next i
'Trim last (unnecessary) line-return
combinedData = Mid(combinedData, 1, Len(combinedData) - 1)
'Place data in cell
ActiveCell.Offset(0, colToMerge).Value = combinedData
'Delete unneeded rows
ActiveCell.Offset(1, 0).Rows("1:" & nextRow - thisRow - 1).EntireRow.Select
ActiveCell.Offset(0, 0).Range("A1").Activate
Selection.Delete Shift:=xlUp
'Select first cell of next valid row
ActiveCell.Offset(0, 0).Select
Else
'Next row not blank, so no need to merge
'Simple step down to next row
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub