连接两个路径字符串以获得最终路径?

时间:2015-03-11 19:05:46

标签: excel-vba excel-2010 vb.net-2010 vba excel

我试图将excel文件保存到特定路径中。 所以基本上,当我点击按钮时,我正在创建一个文件夹,并希望将文件保存在该文件夹中。 创建的文件夹将当前月份作为名称。我试图保存到当前月份文件夹中。

    'Create folder as Month Name. Save filename as date inside "month".
    Dim sDate As String = DateTime.Now.ToString("yyyy-MM-dd") & "_" & DateTime.Now.ToString("HH-mm-ss")
    Dim sMonth As String = DateTime.Now.ToString("MMMM")
    Dim sFolder = Application.StartupPath & "\Resources\Excel\"


    My.Computer.FileSystem.CreateDirectory(sFolder & Format(sMonth))

    Dim sfinal = Path.Combine(sFolder, sMonth)
    xlSh.SaveAs(sfinal & Format(sDate) & ".xlsx")

    xlApp.Workbooks.Close()
    xlApp.Quit()

实际上,这段代码并没有给我任何错误。但不是创建一个名为" March"的文件夹。 < -current month并保存在其中,它将文件保存在\ Excel \中,它还在同一个地方创建文件夹。

4 个答案:

答案 0 :(得分:2)

经过长时间的极度痛苦,我终于做到了! 显然我错过了一个" \" 自从" sMonth"成为动态名称,后来我想用作路径,并将文件保存在该文件夹中。我需要简单地说出那个" \"在sMonth之后,告诉它保存在里面。

在我意识到这一点之前......我已经崩溃了,尽可能地简化了代码,因此我可以逻辑地连接各个部分。我最终得到的是略有不同的东西。现在,SaveAS正确地将文件保存在新文件夹中。

    Dim sDate As String
    sDate = DateTime.Now.ToString("yyyy-MM-dd") & "_" & DateTime.Now.ToString("HH-mm-ss")

    Dim sMonth As String
    sMonth = DateTime.Now.ToString("MMMM")

    Dim sFileName As String
    sFileName = sDate + ".xlsx"

    Dim sFolder As String
    sFolder = Application.StartupPath & "\Resources\Excel\"


    Dim sfinal As String
    sfinal = (sFolder & sMonth & "\") '<- this thingie here o.O

    My.Computer.FileSystem.CreateDirectory(sFolder & Format(sMonth))

    xlSh.SaveAs(sfinal & Format(sFileName))

    xlApp.Workbooks.Close()
    xlApp.Quit()

感谢您的帮助。

答案 1 :(得分:0)

您似乎并未真正设置创建目录的保存路径。相反,我相信你将月份附加到xlSh.SaveAs文件名的开头(sFinal&amp; Format(sDate)&amp;&#34; .xlsx&#34;)。基本上(虽然我不确定具体命令)您需要导航到创建后创建的文件夹。 可能格式为

的东西
My.Computer.FileSystem.ChangeDirectory(sFolder & Format(sMonth))

虽然我不知道那个特定的命令在我写的时候确实存在。

答案 2 :(得分:0)

对于那些一直想知道wtf我正在做这一切的人,这里是完整的子。如果有人需要类似的东西。感谢您的支持。问题已经解决。

    Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button.Click

    Dim xlApp As Excel.Application
    Dim xlSh As Excel.Worksheet


    xlApp = New Excel.Application


    xlApp.Workbooks.Add()
    xlSh = xlApp.Workbooks(1).Worksheets(1)

    'Items from listbox1 to be exported into excel, second row, second column.
    Dim row As Integer = 2
    Dim col As Integer = 2
    For i As Integer = 0 To ListBox1.Items.Count - 1
        xlSh.Cells(row, col) = ListBox1.Items(i)
        row = row + 1
    Next
    row += 1
    col = 1

    'Items from listbox2 to be exported into excel, second row, third column.
    Dim row2 As Integer = 2
    Dim col2 As Integer = 3
    For i As Integer = 0 To ListBox2.Items.Count - 1
        xlSh.Cells(row2, col2) = ListBox2.Items(i)
        row2 = row2 + 1
    Next
    row2 += 1
    col2 = 1


    'Create folder as Month Name. Save filename as date inside that folder.

    'Make filename be yyyy-MM-DD_HH-mm-ss
    Dim sDate As String
    sDate = DateTime.Now.ToString("yyyy-MM-dd") & "_" & DateTime.Now.ToString("HH-mm-ss")

    'This will be used as name for the new folder.
    Dim sMonth As String
    sMonth = DateTime.Now.ToString("MMMM")

    'Filename + extension.
    Dim sFileName As String
    sFileName = sDate + ".xlsx"

    'This is the path.
    Dim sFolder As String
    sFolder = Application.StartupPath & "\Resources\Excel\"

    'This is the path combined with sMonth to make the final path.
    Dim sfinal As String
    sfinal = (sFolder & sMonth & "\")

    'Check if folder with the name sMonth already exists.
    If Dir(sFolder, vbDirectory) = sMonth Then

        'If it exist, then simply save the file inside the folder.
        xlSh.SaveAs(sfinal & Format(sFileName))
    Else
        'If it doesn't exist:
        'This is the creation of sMonth folder, inside "\excel\.
        My.Computer.FileSystem.CreateDirectory(sFolder & Format(sMonth))
        'This saves the excel file at path sfinal, with filename of sFileName
        xlSh.SaveAs(sfinal & Format(sFileName))

    End If



    'Close everything.
    xlApp.Workbooks.Close()
    xlApp.Quit()
End Sub

答案 3 :(得分:0)

您可以使用以下功能(类似于.NET System.IO.Path.Combine)

Function PathCombine(path1 As String, path2 As String)

    Dim combined As String

    combined = path1
    If Right$(path1, 1) <> Application.PathSeparator Then
        combined = combined & Application.PathSeparator
    End If
    combined = combined & path2
    PathCombine = combined

End Function

希望这会有所帮助!