【问题标题】:Convert TRUE FALSE to 1 and 0 during export to Excel (from MS Access) through vb.net在通过 vb.net 导出到 Excel(从 MS Access)期间将 TRUE FALSE 转换为 1 和 0
【发布时间】:2013-11-25 10:23:24
【问题描述】:

在尝试通过 VB.NET 将我的表从 Access 导出到 Excel 时,我希望 TRUE 和 FALSE 值在我的 Excel 工作表中显示为 1 和 0。下面是我在excel中导出和写入数据的代码。

If(.Cells(d, e).value = True, 1, 0) 抛出错误“conversion from type string to Boolean is not valid”。我想这是因为我的 Access 表中也有“字符串”数据。有人可以帮忙吗?

  Dim e As Integer = 1
            For col = 0 To ComDset2.Tables(0).Columns.Count - 1
                d = 2
                For row = 0 To ComDset2.Tables(0).Rows.Count - 1
                    .Cells(d, e).Value = ComDset2.Tables(0).Rows(row).ItemArray(col)
                    IIf(.Cells(d, e).value = True, 1, 0)

                    d += 1
                Next
                e += 1
            Next

【问题讨论】:

  • IIf(.Cells(d, e).value = True, 1, 0) 行假定单元格值为 Boolean 类型,但情况并非如此(Excel 单元格始终为 String)。避免此问题的方法是将单元格视为字符串 (IIf(.Cells(d, e).value.ToString().ToLower() = "true", 1, 0)) 或将单元格转换为 Boolean(例如,通过 Convert.ToBoolean;尽管它会触发任何非布尔值的错误,但即,与TrueFalseInteger 不同的任何东西。或者,您可能会依赖不同的方法(如答案所建议的那样)。

标签: vb.net excel


【解决方案1】:

正如@varocarbas 在您问题下方的评论中所提到的,您将意识到代码中的错误是什么。

IIf(.Cells(d, e).value = True, 1, 0) 行假定单元格值是布尔类型,但事实并非如此(Excel 单元格始终为字符串)。避免此问题的方法是将单元格视为字符串 (IIf(.Cells(d, e).value.ToString().ToLower() = "true", 1, 0)) 或将单元格转换为布尔值(通过 Convert.ToBoolean

但是,不要在循环中替换它,而是在 ONE GO 中的循环之外执行它。

在 VB.NET 2010 + EXCEL 2010 中试用和测试(叹息)

 rng.Replace(What:="TRUE", Replacement:="1", LookAt:=Excel.XlLookAt.xlWhole, _
 SearchOrder:=Excel.XlSearchOrder.xlByRows, MatchCase:=False, SearchFormat:=False, _
 ReplaceFormat:=False)

 rng.Replace(What:="FALSE", Replacement:="0", LookAt:=Excel.XlLookAt.xlWhole, _
 SearchOrder:=Excel.XlSearchOrder.xlByRows, MatchCase:=False, SearchFormat:=False, _
 ReplaceFormat:=False)

来自评论的更多跟进

看这个例子

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        '~~> Define your Excel Objects
        Dim xlApp As New Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet

        xlWorkBook = xlApp.Workbooks.Open("C:\Sample.xlsx")
        xlWorkSheet = xlWorkBook.Sheets(1)

        Dim i As Integer = 1
        Dim d As Integer = 0
        Dim startRow As Integer = 0

        With xlWorkSheet
            For col = 0 To ComDset2.Tables(0).Columns.Count - 1
                d = 2
                startRow = d

                For Row = 0 To ComDset2.Tables(0).Rows.Count - 1
                    .Cells(d, e).Value = ComDset2.Tables(0).Rows(Row).ItemArray(col)
                    d += 1
                Next

                '~~> Create your range here
                Dim rng As Excel.Range = .Range(.Cells(startRow, i), .Cells(d - 1, i))

                rng.Replace(What:="TRUE", Replacement:="1", LookAt:=Excel.XlLookAt.xlWhole, _
                SearchOrder:=Excel.XlSearchOrder.xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False)

                i += 1
            Next
        End With

    End Sub
End Class

【讨论】:

  • @Siddharth。谢谢。非常感激。如何将其转换为 VB.NET...是否有任何 VBA 到 VB.NET 的转换器?
  • @Kashif77:是A VB.NET CODE
  • @SiddharthRout..对不起,我的无知,但它显示错误'公共成员'XLLookat'类型'应用程序类'未找到..
  • @Kashif77:您如何与 Excel 交互?你有没有在顶部声明Imports Excel = Microsoft.Office.Interop.Excel
  • @SiddharthRout。是的,我在顶部引用了它……代码中的“rng”是什么?我必须申报吗。因为如果我只写 .Replace(What:="TRUE", Replacement:="1", LookAt:=Excel.XlLookAt.xlWhole, _ SearchOrder:=Excel.XlSearchOrder.xlByRows, MatchCase:=False, SearchFormat:=False , _ ReplaceFormat:=False) 它不会在 VS 中引发错误,但是当我像 rng.replace 一样编写它时...它在 VS 中显示错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2019-12-28
  • 2019-02-09
  • 2011-12-16
  • 2017-07-12
  • 1970-01-01
相关资源
最近更新 更多