Таблица запросов открывает файл Excel, когда это еще не сделано (VB.NET) - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над приложением, которое читает большой текстовый файл с разделителями табуляции и возвращает файл Excel с несколькими листами с одинаковыми данными.

Мне удалось успешно создать файл.Однако я столкнулся с проблемой.Когда я импортирую файл во вновь созданный файл Excel, файл открывается, когда импортируется первый файл.Я не хочу, чтобы это произошло, я хочу, чтобы пользователь открывал его, когда все файлы были успешно импортированы.

Интересно то, что этого не произошло, когда я отлаживал приложение впервый.Поэтому я озадачен тем, почему это происходит сейчас.Может быть потому, что мне не хватает члена таблицы запросов?

Не могли бы вы мне помочь?Спасибо!

РЕДАКТИРОВАТЬ: я обнаружил, что добавление заголовков в файл был причиной этой проблемы.Тем не менее, после редактирования их до такой степени, что они больше не понятны, я все равно не могу заставить его работать.

заголовки:

encabezados = {"Name",
        "Description",
        "listingId", "SKU", "price", "quantity", "Date", "image", "item",
        "productId", "Shipping", "note", "condition", "category1", "browsepath", "storefrontfeature",
        "asin", "asins", "asinss", "willshipinternationally", "expeditedshipping", "zshopboldface", "producid", "bidForfeaturedplacement", "adddelete",
        "pendingquantity", "fulfillmentchannel", "BusinessPrice", "QuantityPriceType", "QuantityLowerBound", "QuantityPrice", "QuantityLowerBounds",
        "QuantityPrices", "QuantityLowerBoundss", "QuantityPricess", "QuantityLowerBoundsss", "QuantityPricesss", "QuantityLowerBoundssss",
        "QuantityPricessss", "merchantshippinggroup"}

Функция:

Private Sub createExcel(pagina)
    Dim hoja = 1
    Dim excel As Excel.Application = New Microsoft.Office.Interop.Excel.Application()
    If excel Is Nothing Then
        MessageBox.Show("Error. Excel 2016 no está instalado en esta computadora", "Error")
        Exit Sub
    End If
    Dim iSheetsPerBook As Integer
    Dim misValue As Object = System.Reflection.Missing.Value

    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkSheet As Excel.Worksheet

    excel.SheetsInNewWorkbook = pagina

    For i = 1 To pagina
        iSheetsPerBook = excel.SheetsInNewWorkbook
        xlWorkBook = excel.Workbooks.Add(misValue)
        excel.SheetsInNewWorkbook = iSheetsPerBook
    Next

    For x = 1 To pagina
        Dim archivo = String.Format("{0}\ArchivosExcel\excel{1}.txt", dondeEstaElArchivo, x)
        xlWorkSheet = xlWorkBook.Worksheets(hoja)
        Dim qt As QueryTable = xlWorkSheet.QueryTables.Add(Connection:=String.Format("TEXT;{0}", archivo), Destination:=xlWorkSheet.Range("$A$1"))

        With qt
            .Name = "Import"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = XlCellInsertionMode.xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = XlTextParsingType.xlDelimited
            .TextFileTextQualifier = XlTextQualifier.xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = True
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = GetColumnDataTypes(xlWorkSheet.Columns.Count)
            .TextFileTrailingMinusNumbers = True
            .Refresh(BackgroundQuery:=False)
        End With

        hoja += 1
    Next


    Dim saveDialog As New SaveFileDialog()
    saveDialog.Title = "Por favor elija donde quiere guardar el archivo"
    saveDialog.Filter = "Excel 2007-on (*.xlsx)|*.xlsx"
    Dim respuesta = saveDialog.ShowDialog()
    If respuesta = DialogResult.Cancel Or saveDialog.FileName = "" Then
        Exit Sub
    End If

    Dim fileSave = saveDialog.FileName
    xlWorkBook.SaveAs(fileSave)
    xlWorkBook.Close(True, misValue, misValue)
    excel.Quit()

    releaseObject(xlWorkSheet)
    releaseObject(xlWorkBook)
    releaseObject(excel)
End Sub


Private Function GetColumnDataTypes(queryTableColumnsCount As Long) As Object
    Dim textDataTypes As XlColumnDataType()
    textDataTypes = Enumerable.Repeat(XlColumnDataType.xlTextFormat, queryTableColumnsCount).ToArray()
    Return textDataTypes
End Function

1 Ответ

0 голосов
/ 14 февраля 2019

Я выяснил причину:

Проблема была вызвана вставкой заголовков до импорта текстового файла.В итоге я вставил их после импорта, и это сработало как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...