将Excel数据导出到INI文件

时间:2015-07-30 21:15:02

标签: excel vba excel-vba

摘要:将值从列导出到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上看到任何其他专门用于此任务的东西让我开始。如果你发现了一些具体的功能,那就太棒了。否则,如果有人可以让我开始使用代码来完成这项任务,我将非常感激。

2 个答案:

答案 0 :(得分:0)

这应该让你开始。它使用SELECT DATEDIFF(mm,startDate,endDate)-1 + IIF(EOMONTH(endDate)=endDate, 1, 0) + IIF(1=DAY(startDate), 1, 0) AS full_months FROM dates; 中的值并将其写入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

答案 1 :(得分: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

使用逗号上的split来获取名称和小写,然后添加一个=然后将.doc上的初始字符串拆分为关闭,如果你愿意,我们可以在这里使用replace。

这是我的测试输入:

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

这是我的ini文件:

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文件已经存在,这将覆盖你的ini文件如果你想追加,那么改变这个:

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

到此:

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