0

我有一个应用程序可以自动化最初基于 DTS 包的报告系统。基于 Web 的应用程序当前正在将输出 xls 文件写入网络上的另一台服务器。我发现即使在网站关闭后,一个 excel 实例仍在被写入的服务器上运行。我希望能够更改我的退出例程以输出 csv 文件而不是 xls 文件,或者在联网的机器上终止 EXCEL.exe 进程。请帮忙!

编辑:如果我将文件扩展名更改为另存为 csv,文件如下所示 在此处输入图像描述

如果那张图片太小,它基本上显示行是分开的,但列不是。应该用逗号分隔列的地方是带问号的小框

这是我目前编写 .xls 文件的例程

Public Sub DisplayandConvertToXLS()
    Dim i As Integer
    Dim ds As New DataSet
    Dim da As SqlDataAdapter
    Dim objFileStream As FileStream
    Dim objStreamWriter As StreamWriter
    Dim fs As Object, myFile As Object
    Dim cnn As SqlConnection = New SqlConnection("DataSource=dpsdb;InitialCatalog=productionservicereminder;User Id=id;Password=pass;")
    Dim strLine, filePath, fileExcel As String

    'Create a file name.

    fileExcel = FileNameTxt.Text & ".xls"



    'Set a virtual folder to save the file.
    'Make sure that you change the application name to match your folder.

    filePath = "\\10.1.2.4\SRS Shortcuts\Export\SQL Output\CSV Reports\"


    fileName = filePath & FolderNameTXT.Text & "/" & fileExcel

    'Use FileStream to create the .xls file.
    objFileStream = New FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write)
    objStreamWriter = New StreamWriter(objFileStream)

    'Use a DataReader to connect to the database.
    cnn.Open()
    Dim sql3 As String = DisplayQTXT.Text

    Dim cmd As SqlCommand = New SqlCommand(sql3, cnn)
    cmd.Parameters.Add(New SqlParameter("@ProgramGroupID", PgidTXT.Text))
    Dim drr As SqlDataReader

    drr = cmd.ExecuteReader()

    'Enumerate the field names and records that are used to build the file.
    For i = 0 To drr.FieldCount - 1
        strLine = strLine & drr.GetName(i).ToString & Chr(9)
    Next

    'Write the field name information to file.
    objStreamWriter.WriteLine(strLine)

    'Reinitialize the string for data.
    strLine = ""

    'Enumerate the database that is used to populate the file.
    While drr.Read()
        For i = 0 To drr.FieldCount - 1
            strLine = strLine & drr.GetValue(i) & Chr(9)
        Next
        objStreamWriter.WriteLine(strLine)
        strLine = ""
    End While

    'Clean up.
    drr.Close()
    cnn.Close()
    ds.Clear()

    objStreamWriter.Close()
    objFileStream.Close()
    objStreamWriter.Dispose()
    objFileStream.Dispose()

End Sub
4

2 回答 2

1

据我所知,您在示例中没有使用 excel,并且您正在输出一个 .csv 文件。您只是保存一个扩展名为 .xls 的 .csv 文件。如果您实际上是在启动 excel,那么您并没有在此代码中执行此操作。

于 2011-07-29T17:27:39.277 回答
1

您的代码中的任何内容都与 Excel 无关——它只是写出一个制表符分隔的文件,该文件恰好具有 .xls 扩展名。

您可以通过将“Chr(9)”更改为“,”来轻松地将其设为 CSV(尽管您还必须确保从输入数据中删除逗号或引用它,但请确保您引用你还可以在输入数据中转义引号......猜猜这比“相当容易”:))。

于 2011-07-29T17:27:59.137 回答