我参照别人将DataGrid的数据导出到EXCEL里面进行打印的例子,代码如下:
Private  Sub  Command1_Click()  
Dim  i  As  Integer  
Dim  j  As  Integer  
Dim  k  As  Integer  
Dim  xlApp  As  Excel.Application  
Dim  xlBook  As  Excel.Workbook  
Dim  xlSheet  As  Excel.Worksheet  
Set  xlApp  =  CreateObject("Excel.Application")  
'xlApp.Visible  =  True  
Set  xlBook  =  xlApp.Workbooks.Add  
Set  xlSheet  =  xlBook.Worksheets(1)  
       xlSheet.Columns.AutoFit  
       Me.MousePointer  =  11  
For  k  =  0  To  DataGrid1.Columns.Count  -  1  'DataGrid所有的列数  
       xlSheet.Cells(1,  k  +  1)  =  DataGrid1.Columns(k).Caption  '第一行为DataGrid的列标题  
Next  
     DataGrid1.Scroll  0,  -DataGrid1.FirstRow'导出前拉动过垂直滚动条  
     DataGrid1.Row  =  0  
For  i  =  0  To  DataGrid1.ApproxCount  -  1  'DataGrid的所有行数  
             
       For  j  =  0  To  DataGrid1.Columns.Count  -  1  'DataGrid所有的列数,若将此数改小到不拉DataGrid的垂直滚动条的时候能看见的行数的时候正常  
               DataGrid1.Col  =  j  
             (1)  xlSheet.Cells(i  +  2,  j  +  1)  =  DataGrid1.Text  '从第二行显示'DataGrid的内容  
       Next  
     If  i  <  DataGrid1.ApproxCount  -  1  Then  
       DataGrid1.Row  =  DataGrid1.Row  +  1  
       End  If  
Next  
Me.MousePointer  =  0  
MsgBox  "ok"  
xlApp.Visible  =  True  
Set  xlApp  =  Nothing    '交还控制给Excel  
Set  xlBook  =  Nothing  
Set  xlSheet  =  Nothing  
End  Sub  在我自己datagrid列中有一栏是身份证号码,18位的,比方说是452020202020202020,导出到Excel里却成了4.52E+17,VB把它当Double处理了,请问我该怎么改?应该是在(1)的位置改吧?

解决方案 »

  1.   

    原来代码中是这样写的  xlSheet.Cells(i  +  2,  j  +  1)  =  DataGrid1.Text  
    难道我要设一个变量作为计数器,等到变量到了身份证那列再进行转换?太麻烦了吧
      

  2.   

    =val("datagrid1.text")
    看一下了!
      

  3.   

    错了,身份证中还有字母,用=trim("datagrid1.text")!
      

  4.   

    将excel中的列属性改了不久可以了么?
      

  5.   

    要不将excel中的列属性改了,要不就多加个"号
      

  6.   

    将网格的格式设置为文本,然后再写入!
    xlSheet.Cells(H + 1, L).NumberFormatLocal = "@"
      

  7.   

    用trim(datagrid.text) 和 val(datagrid)都不行,而更改excel的属性我不会,因为这是在调用excel。最后我用自己的笨办法设置一个计数器作为判断,等到了那一列就就行判断,用Cstr(datagrid)转换,如下:
    For j = 0 To DataGrid1.Columns.Count - 1         
                   DataGrid1.Col = j
                   If j = 4 Then
                    xlSheet.Cells(i + 2, j + 1) = CStr(DataGrid1.Text) '转换
                   Else
                    xlSheet.Cells(i + 2, j + 1) = DataGrid1.Text 
                   End If
           Next
    可仍然不行,请问什么地方出问题了
      

  8.   

    多+个空格datagrid1.text & " "
      

  9.   

    代码应该没什么问题,因为我逐步调试时可以看到身份证号码确实转换成字符了,可一在excel显示时又成了4.52E+17,郁闷
      

  10.   

    我碰过这个问题,修改excel列属性为文本格式既可!
      

  11.   

    这是Excel的问题,单元格默认是采用常规格式,所以只要输入字符串可以被转换成数值,那么就会被套用成数值格式。数值如果超过一定范围,就自动转为科学计数法。
    除非该单元格已经手工设置为文本格式。
    所以,如 QQRN 所说,你的代码中必须要有设置excel单元格属性的代码,或者输出时多加个非数字字符:英文状态下的单引号。
    至于如何设置excel表格相关属性,你可以打开excel,然后启动记录宏,再开始设置,然后停止宏,再去看excel中VBA自动生成的代码,基本上,简单复制到VB中就可以了。
      

  12.   

    我现在在VB调用excel,请问怎么修改excel列属性啊?
      

  13.   

    看了一下,其实楼上 frankwong 已经告诉你了。
    以你的代码为例,在输出身份证字串的语句前,再加上一句:
    For j = 0 To DataGrid1.Columns.Count - 1         
        DataGrid1.Col = j
        If j = 4 Then
            xlSheet.Cells(i + 2, j + 1).NumberFormatLocal = "@"     '加这句看看
            xlSheet.Cells(i + 2, j + 1) = CStr(DataGrid1.Text)      '转换
        Else
            xlSheet.Cells(i + 2, j + 1) = DataGrid1.Text 
        End If
    Next
      

  14.   

    搞定,谢各位,特别是: victorycyz(中海)  QQRN(笨QQ-馊主意提供者)  rardge(Rardge)