Вот тот, который даст Вам визуального селектора файла для выбора папки, к которой Вы хотите сохранить файлы, и также позволяет Вам выбрать разделитель CSV (я использую каналы '|', потому что мои поля содержат запятые, и я не хочу иметь дело с кавычками):
' ---------------------- Directory Choosing Helper Functions -----------------------
' Excel and VBA do not provide any convenient directory chooser or file chooser
' dialogs, but these functions will provide a reference to a system DLL
' with the necessary capabilities
Private Type BROWSEINFO ' used by the function GetFolderName
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Function GetFolderName(Msg As String) As String
' returns the name of the folder selected by the user
Dim bInfo As BROWSEINFO, path As String, r As Long
Dim X As Long, pos As Integer
bInfo.pidlRoot = 0& ' Root folder = Desktop
If IsMissing(Msg) Then
bInfo.lpszTitle = "Select a folder."
' the dialog title
Else
bInfo.lpszTitle = Msg ' the dialog title
End If
bInfo.ulFlags = &H1 ' Type of directory to return
X = SHBrowseForFolder(bInfo) ' display the dialog
' Parse the result
path = Space$(512)
r = SHGetPathFromIDList(ByVal X, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
GetFolderName = Left(path, pos - 1)
Else
GetFolderName = ""
End If
End Function
'---------------------- END Directory Chooser Helper Functions ----------------------
Public Sub DoTheExport()
Dim FName As Variant
Dim Sep As String
Dim wsSheet As Worksheet
Dim nFileNum As Integer
Dim csvPath As String
Sep = InputBox("Enter a single delimiter character (e.g., comma or semi-colon)", _
"Export To Text File")
'csvPath = InputBox("Enter the full path to export CSV files to: ")
csvPath = GetFolderName("Choose the folder to export CSV files to:")
If csvPath = "" Then
MsgBox ("You didn't choose an export directory. Nothing will be exported.")
Exit Sub
End If
For Each wsSheet In Worksheets
wsSheet.Activate
nFileNum = FreeFile
Open csvPath & "\" & _
wsSheet.Name & ".csv" For Output As #nFileNum
ExportToTextFile CStr(nFileNum), Sep, False
Close nFileNum
Next wsSheet
End Sub
Public Sub ExportToTextFile(nFileNum As Integer, _
Sep As String, SelectionOnly As Boolean)
Dim WholeLine As String
Dim RowNdx As Long
Dim ColNdx As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim StartCol As Integer
Dim EndCol As Integer
Dim CellValue As String
Application.ScreenUpdating = False
On Error GoTo EndMacro:
If SelectionOnly = True Then
With Selection
StartRow = .Cells(1).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
Else
With ActiveSheet.UsedRange
StartRow = .Cells(1).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
End If
For RowNdx = StartRow To EndRow
WholeLine = ""
For ColNdx = StartCol To EndCol
If Cells(RowNdx, ColNdx).Value = "" Then
CellValue = ""
Else
CellValue = Cells(RowNdx, ColNdx).Value
End If
WholeLine = WholeLine & CellValue & Sep
Next ColNdx
WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
Print #nFileNum, WholeLine
Next RowNdx
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
NAnt, поскольку проект мертв или находится на поддержании жизни (последний выпуск был 0.86 beta 1, два года назад). Это было в основном прервано выпуском MSBuild. NAnt было хорошо, MSBuild в порядке, я думаю, но меня все больше и больше тянет писать код, ну, ну, язык, а не некоторые процедурные вещи на основе XML. С фреймворками сборки на основе XML опыт отладки ужасен, и вы в конечном итоге обманываете, встраивая «сценарии» в C #, что сводит на нет цель объявления над программированием. Та же печальная история, что и XSLT, если на то пошло.
Несколько хороших фреймворков сборки без XML:
Не используйте C # для создания сценария, потому что вы не хотите компилировать его, когда вы вносите в него изменения.
Если вы планируете использовать PowerShell, обратите внимание на PSake .
Если вы дружите с XML, тогда используйте MSBuild или NAnt. Возможно эти сценарии сборки будут вам полезны. MSBuild имеет одно преимущество: Ctrl + F5 создает этот сценарий в Visual Studio.
Я медленно перехожу к Rake, потому что он лучше, а Ruby - это язык программирования (что означает, что вы можете делать все, что угодно): Я писал в блоге о том, насколько это может быть хорошо, но вы должны переводить это или смотреть только на код . Если вам это нравится, то вы можете увидеть полный сценарий и зависимости .
Я не вижу НИКАКОЙ причины, почему бы не выполнить простой процесс сборки в Powershell.
I используйте для моего проекта песочницы следующее:
В конце концов, задачи MSBuild и NAnt могут выполнять оболочку в командной строке, так что в конечном итоге они могут поддерживать материалы, не относящиеся к MS.
I Я лично предпочел бы MSBuild и позволил бы серверу сборки, например TeamCity of CCNET, выполнять сборку и развертывание и т. д. Это невероятно гибко.
Самая большая проблема - это обслуживание ваших сценариев сборки. Если вы видите, что ваши проекты или среды остаются в некоторой степени статичными, тогда нет причин не писать собственные сценарии сборки, упаковки и развертывания.
Обычно все становится намного сложнее, чем ваши проекты. Некоторые из преимуществ MSBuild, nAnt и других (коммерческих) продуктов - это предварительно запеченная поддержка интеграции с общими службами или концепциями (например, архивирование файлов) и значительно меньше времени, чтобы включить ее в процесс сборки.
Будет стоимость (реальная или с точки зрения усилий), если вы можете разумно спрогнозировать свои потребности в автоматизации,
Одна вещь, о которой я пока особо не упоминал: управление зависимостями / перестроением. Хорошая система сборки (даже почтенная make
) справится с этим за вас, и если вы создаете свою собственную систему сборки, вы делаете одно из двух:
С этой точки зрения, я бы долго и усердно подумал, прежде чем внедрять ваше собственное решение.
Прискорбно слышать, что NAnt умирает, хотя ; Хотя у Ant есть свои недостатки, он является разумной и гибкой системой сборки.
Если вы намереваетесь и дальше оставаться «магазином для одного человека» и ваши проекты, как правило, небольшие, то вы, вероятно, сможете обойтись развертыванием собственной системы сборки. Я бы по-прежнему не рекомендовал этого делать, поскольку наличие опыта работы с часто используемыми средами сборки - это хорошая вещь, которую нужно включить в свое резюме.
Я написал настраиваемую систему сборки, которую мы используем на работе около пяти лет назад для обработки некоторых довольно сложных, многосторонних -целевые сборки, которые у нас есть. Мы используем его примерно с 2003 года и продолжаем его использовать. Однако я пытался перенести его на Ant или даже Make по следующим причинам:
Теперь наша среда немного сложнее, чем большинство других, поскольку мы занимаемся разработкой встраиваемых систем, поэтому нередко сборка одного продукта состоит из двух или трех различных цепочек инструментов в Windows, отправляется на компьютер Linux через ssh для целевой системы Linux, и psexec на удаленную машину Windows, чтобы использовать компилятор с блокировкой узла. Это' На самом деле довольно забавно оглянуться назад и подумать, что система сборки, которую мы начали с одного командного файла, была переписана с использованием Perl, чтобы приспособить смесь декларативных операторов и операторов языка программирования, а затем была снова написана в декларативном XML-подобном Ant. стиль, раскрывающий партию или оболочку. Теперь я думаю о том, чтобы заменить все это на Ant + Maven + Ivy или какую-то подобную цепочку.
В то время для меня было правильным решением развернуть мою собственную систему сборки, поскольку мы были довольно маленьким магазином, занимавшимся сборкой, в основном основывались на инструментах командной строки, и в то время не было широкого набора инструментов. Однако сегодня я бы порекомендовал хорошенько и внимательно изучить доступные инструменты. После всего, написание собственной системы сборки означает, что вы будете тратить время и деньги на ее написание и поддержку вместо написания производственного кода .
Сегодня для этой задачи доступно множество инструментов, которые справятся практически с любой извращенной идеей что вы можете придумать. Я думаю, что время, потраченное на изучение существующей системы и ее расширение для удовлетворения ваших потребностей, вероятно, окупится. Мне показался интересным опыт написания задач Ant. В целом, это был хороший опыт обучения, хотя я выполнял его на контрактной работе, где для публикации документов использовались Ant и CruiseControl.
Я думаю, что время, потраченное на изучение существующей системы и ее расширение для удовлетворения ваших потребностей, вероятно, окупится. Мне показался интересным опыт написания задач Ant. В целом, это был хороший опыт обучения, хотя я выполнял его на контрактной работе, где для публикации документов использовались Ant и CruiseControl. Я думаю, что время, потраченное на изучение существующей системы и ее расширение для удовлетворения ваших потребностей, вероятно, будет более целесообразным. Мне показался интересным опыт написания задач Ant. В целом, это был хороший опыт обучения, хотя я выполнял его на контрактной работе, где для публикации документов использовались Ant и CruiseControl.