Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net DataGridView到Excel-数字另存为文本_Vb.net_Excel_Datagridview - Fatal编程技术网

Vb.net DataGridView到Excel-数字另存为文本

Vb.net DataGridView到Excel-数字另存为文本,vb.net,excel,datagridview,Vb.net,Excel,Datagridview,我有一个VB.Net表单,允许我将DataGridView保存为Excel,但它将数字保存为文本。这意味着饼图和其他东西不会“刷新”。 我应该在VB代码中用数字格式化列,还是有其他方法将数字另存为数字 有一次我使用了一个Excel模板,其中的DataGridView值将转到现有文件。我以为它们的格式会和单元格的格式一样 这是我正在使用的代码的一部分 Private Sub ButtonExport_Click(sender As Object, e As EventArgs) Handles B

我有一个VB.Net表单,允许我将
DataGridView
保存为Excel,但它将数字保存为文本。这意味着饼图和其他东西不会“刷新”。 我应该在VB代码中用数字格式化列,还是有其他方法将数字另存为数字

有一次我使用了一个Excel模板,其中的
DataGridView
值将转到现有文件。我以为它们的格式会和单元格的格式一样

这是我正在使用的代码的一部分

Private Sub ButtonExport_Click(sender As Object, e As EventArgs) Handles ButtonExport.Click
    Dim exeDir As New IO.FileInfo(Reflection.Assembly.GetExecutingAssembly.FullName)
    Dim xlPath = IO.Path.Combine(exeDir.DirectoryName, "template.xlsx")

    Dim misValue As Object = System.Reflection.Missing.Value
    Dim i As Integer
    Dim j As Integer

    xlApp = New Microsoft.Office.Interop.Excel.Application
    xlWorkBook = xlApp.Workbooks.Open(xlPath)
    xlWorkSheet = xlWorkBook.Worksheets("data")

    For i = 0 To DataGridView1.RowCount - 1
        For j = 0 To DataGridView1.ColumnCount - 1
            For k As Integer = 1 To DataGridView1.Columns.Count
                xlWorkSheet.Cells(i + 1, j + 4) = DataGridView1(j, i).Value
            Next
        Next
    Next 
    xlWorkSheet.SaveAs("C:\Users\User\Desktop\" & TextBox3.Text & ".xlsx")
    xlWorkBook.Close()
    xlApp.Quit()

    Me.Close()
    releaseObject(xlApp)
    releaseObject(xlWorkBook)
    releaseObject(xlWorkSheet)
End Sub

我已经尝试了
DataGridView1.Columns(2).ValueType=GetType(Decimal)
,但它什么也没做。

OP再次回答:D

For i = 0 To DataGridView2.RowCount - 1
   For j = 0 To DataGridView2.ColumnCount - 1
     Dim val As Object = DataGridView2(2, i).Value
        If IsDBNull(val) Then
            xlWorkSheet.Cells(i + 1, 3) = Nothing
        Else
            xlWorkSheet.Cells(i + 1, 3) = CDbl(val)
      End If
   Next
Next

看起来您正在使用名为“数据”的工作表打开现有工作簿。该表中的单元格格式是否为数字?设置列的格式可能很有趣(尽管我看到失败了)——在添加值时,是否尝试设置每个单元格(列2中)的格式?每个单元格都可以有自己的格式,因此可能有什么东西阻止了列级分配的工作,因为单元格已经存在。起初我认为它可以工作。我失败了,哈哈。不,我没试过。你的意思是像
xlsheetwork.Cells(i+1,j+4)=DataGridView1(j,i).Value.type(decimal)
?@SteveBarron我找不到实现它的方法。每次我写“十进制”时,它就变成“十进制的”。。所以我使用了错误的语法。思想?