Не удается открыть таблицу Excel после экспорта datagridview из vb .net

#vb.net #excel-interop

#vb.net #excel-взаимодействие

Вопрос:

У меня есть следующий код, который принимает datagridview и экспортирует его содержимое в Excel. Все работает нормально. Тем не менее, я хотел бы запустить новую электронную таблицу после ее завершения. В настоящее время я получаю следующую ошибку, когда она переходит к строке для открытия Excel:

Excel не может открыть файл ‘exported.xlsx «потому что формат файла или расширение файла недопустимы. Убедитесь, что файл не поврежден и что расширение файла соответствует формату файла.

Вот мой код:

  Private Sub Button4_Click_1(sender As System.Object, e As System.EventArgs) Handles btlXLSExport.Click
    Dim fs As New IO.StreamWriter("C:exported.xlsx", False)
    fs.WriteLine("<?xml version=""1.0""?>")
    fs.WriteLine("<?mso-application progid=""Excel.Sheet""?>")
    fs.WriteLine("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">")
    fs.WriteLine("    <ss:Styles>")
    fs.WriteLine("        <ss:Style ss:ID=""1"">")
    fs.WriteLine("           <ss:Font ss:Bold=""1""/>")
    fs.WriteLine("        </ss:Style>")
    fs.WriteLine("    </ss:Styles>")
    fs.WriteLine("    <Worksheet ss:Name=""Sheet1"">")
    fs.WriteLine("        <ss:Table>")
    For x As Integer = 0 To dgCustomers.Columns.Count - 1
        fs.WriteLine("            <ss:Column ss:Width=""{0}""/>",
                     dgCustomers.Columns.Item(x).Width)
    Next
    fs.WriteLine("            <ss:Row ss:StyleID=""1"">")
    For i As Integer = 0 To dgCustomers.Columns.Count - 1
        fs.WriteLine("                <ss:Cell>")
        fs.WriteLine(String.Format(
                     "                   <ss:Data ss:Type=""String"">{0}</ss:Data>",
                                  dgCustomers.Columns.Item(i).HeaderText))
        fs.WriteLine("                </ss:Cell>")
    Next
    fs.WriteLine("            </ss:Row>")
    For intRow As Integer = 0 To dgCustomers.RowCount - 2
        fs.WriteLine(String.Format("            <ss:Row ss:Height =""{0}"">",
                                  dgCustomers.Rows(intRow).Height))
        For intCol As Integer = 0 To dgCustomers.Columns.Count - 1
            fs.WriteLine("                <ss:Cell>")
            fs.WriteLine(String.Format(
                         "                   <ss:Data ss:Type=""String"">{0}</ss:Data>",
                                       dgCustomers.Item(intCol, intRow).Value.ToString))
            fs.WriteLine("                </ss:Cell>")
        Next
        fs.WriteLine("            </ss:Row>")
    Next
    fs.WriteLine("        </ss:Table>")
    fs.WriteLine("    </ss:Worksheet>")
    fs.WriteLine("</ss:Workbook>")
    fs.Close()

    Dim wapp As Microsoft.Office.Interop.Excel.Application

    Dim wsheet As Microsoft.Office.Interop.Excel.Worksheet

    Dim wbook As Microsoft.Office.Interop.Excel.Workbook

    ' Dim wrange As Microsoft.Office.Interop.Excel.Range

    ' Dim chartRange As Microsoft.Office.Interop.Excel.Range



    wapp = New Microsoft.Office.Interop.Excel.Application

    wbook = wapp.Workbooks.Open("C:exported.xlsx")
    wsheet = wbook.Worksheets(1)


End Sub
 

Спасибо за любую помощь!

Комментарии:

1. попробуйте переименовать exported.xlsx в exported.xls

2. Я должен был добавить это в OP. Я пробовал оба расширения файлов XLS и XLSX с тем же результатом. Спасибо.

3. Каждый день возникает вопрос о том, что «Excel не работает», «Excel не открывается»… Я действительно не понимаю, зачем делать это таким образом? Вчера кто-то жаловался на то, что Excel не открывает html встроенный файл DataGridView . Получите пустой файл шаблона, используйте Microsoft.Ace.OleDb его для заполнения. Работает каждый раз.

4. Я не пытаюсь получить данные из ODBC-соединения? Возможно, я неправильно понял, что вы мне говорите. Я заполняю datagridview из веб-службы. Другие хотели бы иметь возможность переносить эту информацию в Excel и манипулировать данными, поэтому я хочу сбросить datagridview в Excel (что работает нормально), но затем я хочу открыть тот же файл Excel после экспорта для просмотра зрителем. Это та часть, которая не работает. Предположительно, потому, что при создании файла я передаю ему неправильную XML-информацию и, следовательно, не указываю правильные заголовки / etc…