#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…