Конвертировать xls в csv или убить процесс EXCEL.exe - PullRequest
0 голосов
/ 29 июля 2011

У меня есть приложение, которое автоматизирует систему отчетности, изначально основанную на пакетах DTS.В настоящее время веб-приложение записывает выходной файл xls на другой сервер в сети.Я обнаружил, что экземпляр excel остается запущенным на сервере, на который выполняется запись даже после закрытия веб-сайта.Я хотел бы либо изменить свою процедуру выхода для вывода файла csv, а не файла xls, либо завершить процесс EXCEL.exe на сетевых машинах.Помогите, пожалуйста!

РЕДАКТИРОВАТЬ: вот как выглядят файлы, если я изменю расширение файла, чтобы сохранить его в формате csv enter image description here

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

. Вот моя текущая процедура для записи файлов .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

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Ничто в вашем коде здесь не имеет ничего общего с Excel - это просто запись файла с разделителями табуляции, который имеет расширение .xls.

Вы можете довольно легко сделать это CSV, изменивот "Chr (9)" до "," (хотя вам также нужно будет либо убрать запятые из ваших входных данных, либо заключить их в кавычки, но убедитесь, что, если вы заключите в кавычки, вы также избегаете кавычек во входных данных... думаю, это немного меньше, чем "довольно легко" :)).

1 голос
/ 29 июля 2011

Насколько вы можете судить, вы не используете Excel в этом примере, и вы выводите файл .csv. Вы просто сохраняете файл .csv с расширением .xls. Если вы на самом деле запускаете Excel, вы не делаете этого в этом коде.

...