2015-07-30 5 views
0

Описание: Экспорт значений из столбца в INI-файл.Экспорт данных Excel в файл INI

У меня есть таблица, в которой есть данные в столбце M, и я хочу скопировать данные из столбца M в файл .ini. Каждая ячейка в столбце содержит имя файла отчета о проделанной работе. Эти данные были бы как:

Smith, John Progress Report 2015-07-30.doc 

Файл .ini будет что-то вроде:

[Settings] 
smith=Smith, John Progress Report 2015-07-30 

Я предпочел бы иметь ключ в нижнем регистре и удалите ".doc" из файла.

Я хочу экспортировать эти имена файлов в .ini и использовать последнюю фамилию в качестве ключа. Я не знаю, с чего начать. Excel не имеет собственного доступа к записи в файлы .ini, но он может использовать Word или Windows API из того, что я читал в Интернете. Кроме того, я думаю, Excel может просто просто добавить данные в .ini в виде текстового файла.

Итак, у меня есть некоторые идеи, но я ничего не видел в StackOverflow, который специально работал над этой задачей, чтобы начать меня. Если вы найдете что-то, что делает это конкретно, тогда это будет здорово. В противном случае, если кто-то может заставить меня начать работу над кодом, чтобы выполнить эту задачу, я был бы очень признателен.

ответ

0

Это должно вас начать. Он использует значение от M1 и записывает его в файл .ini. Просто добавьте цикл для повторения всех ваших строк, и вы должны быть настроены.

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long 

Public Sub ExportToIni() 

    Dim re As Object 
    Set re = CreateObject("VBScript.RegExp") 
    re.IgnoreCase = True 
    re.Pattern = "^(([^,]+),.+)\.doc$" 

    Dim strText As String 
    strText = Trim$(Cells(1, 13)) ' [M1] 

    Dim m As Object, c As Object, strLastName As String, strFileName As String 
    If re.Test(strText) Then 

     Set c = re.Execute(strText) 
     strFileName = c(0).SubMatches(0) 
     strLastName = LCase$(c(0).SubMatches(1)) 

     WritePrivateProfileString "Settings", strLastName, strFileName, "c:\path\to\your.ini" 

    End If 

End Sub 

.ini файл:

[Settings] 
smith=Smith, John Progress Report 2015-07-30 
+0

Оба выше решения выглядят большими по номинальной стоимости, я собираюсь проверить его сегодня, как только смогу. Спасибо вам, и я помету один из ответов к концу дня. – user65795

+0

Решение Dan будет работать только в первый раз. Но вы не сможете обновить пару ключ/значение в '.ini' позже. Вам нужно будет воссоздать '.ini' с нуля.Это преимущество 'WritePrivateProfileString'. Но если вы можете работать в рамках этого требования, он должен работать нормально. – Bond

+0

Я думаю, что вы правы, есть большое преимущество использования API выигрыша и WritePrivateProfileString, так как это обеспечит точное обновление данных. Большое спасибо за ваше решение. – user65795

0

Это будет делать то, что вы хотите:

Sub SaveIni() 
    Dim c as range 
    Open "C:\Temp\Output.ini" For Output As #1 
    For Each c In Range("M1:M" & Range("M" & Rows.Count).End(xlUp).Row) 
     Print #1, LCase(Split(c, ",")(0)) & "=" & Split(c, ".doc")(0) 
    Next 
    Close #1 
End Sub 

Использует разделение на запятой, чтобы получить имя и нижний регистры тогда добавляет = то разбивает исходную строку на .doc, чтобы удалить ее, мы могли бы использовать здесь замену, если вы этого пожелаете.

Вот мой тестовый вход:

Smith, John Progress Report 2015-07-30.doc 
davis, andrew Progress Report 2015-07-30.doc 
MALCOLMSON, Aaron File 20jio32ejo23oji32eojie23oj23eoje23joe3e23oji-07-30.doc 
Green, Frank Report 20-07-30.doc 

Вот мой ини файл:

smith=Smith, John Progress Report 2015-07-30 
davis=davis, andrew Progress Report 2015-07-30 
malcolmson=MALCOLMSON, Aaron File 20jio32ejo23oji32eojie23oj23eoje23joe3e23oji-07-30 
green=Green, Frank Report 20-07-30 

Заметим, что это будет перезаписать INI файл, если он уже существует Если вы хотите добавить то изменить :

Open "C:\Temp\Output.ini" For Output As #1

к этому:

Open "C:\Temp\Output.ini" For Append As #1

Смежные вопросы