【问题标题】:Displaying Excel data in a table in richtextbox vb.net在richtextbox vb.net的表格中显示Excel数据
【发布时间】:2018-05-01 10:53:21
【问题描述】:

我正在使用 gembox.spreadsheet 在富文本框中导入数据,代码如下:

 Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    Dim ef As ExcelFile = ExcelFile.Load(OpenFileDialog1.FileName)
    Dim sb As New StringBuilder()
    For Each sheet As ExcelWorksheet In ef.Worksheets
        sb.AppendLine()
        sb.AppendFormat("{0} {1} {0}", New String("-"c, 25), sheet.Name)
        For Each row As ExcelRow In sheet.Rows
            sb.AppendLine()

            For Each cell As ExcelCell In row.AllocatedCells
                If cell.ValueType <> CellValueType.Null Then
                    sb.Append(String.Format("{0} [{1}]", cell.Value, cell.ValueType).PadRight(25))
                Else
                    sb.Append(New String(" "c, 25))
                End If
            Next
        Next
    Next
    bodytxt.Text = sb.ToString()
End Sub

问题是,当 .xls 文件在 bodytxt 文本框中导入/加载时,它看起来很奇怪......类似于:

 ------------------------- Sheet1 -------------------------
 [String]                Pic [String]             Unique id [String]       
 Prefix [String]          First name [String]      Last name [String]       
 Gender [String]          Title [String]           Company [String]         
Phone [String]           Mobile [String]          Fax [String]             
B.Email [String]         P.Email [String]         Reference [String]       
Address [String]         Address 2 [String]       Country [String]         
City [String]            Zip [String]             Facebook [String]  

有什么方法可以显示数据,例如 excel 显示数据/在表格中显示数据/或至少一个接一个地正确排列数据,因为它看起来非常混乱(我在帖子中以不同的方式排列它们,以便它们会显示在代码块中)。有什么办法吗?

更新 1

我想出了一些办法..这可能会帮助每个正在寻找一种在富文本框中创建表格的方法的人。让我先解释几件事。在富文本框中插入一个表格是不可能的(据我所知),或者至少像 MS WORD 这样在 rtxtbox 中创建一个可自定义的表格是不可能/困难的......但是如果我们能找到另一种方法吗?让我们想一想.... 数据网格视图可以从 EXCEL 加载数据,对吗?现在如何在 DATAGRIDVIEW 中加载数据,然后在富文本框中添加行的单元格值..在每一行之后,为什么不添加一堆“---”(破折号)?然后每一行看起来都是独立的,会给我们一个像桌子一样的外观......! C++ 和 VB.net 的代码如下:

C++

   using System;
   using System.Collections.Generic;
   using System.ComponentModel;
   using System.Data;
   using System.Drawing;
   using System.Linq;
   using System.Text;
   using System.Threading.Tasks;
   using System.Windows.Forms

 'populate your dgvw first
 'Create a button to add data from dgvw to rtxtbox

 private void button1_Click(object sender, EventArgs e)
    {

        for(int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {

            richTextBox1.Text = richTextBox1.Text + "-";

            for(int j = 0; j < dataGridView1.Columns.Count; j++)
            {

                richTextBox1.Text = richTextBox1.Text + "\t" + dataGridView1.Rows[i].Cells[j].Value.ToString() + "\t";

            }

            richTextBox1.Text = richTextBox1.Text + "\n";
            richTextBox1.Text = richTextBox1.Text + "----------------------------------------------------------------------------------------------------------"; 'the dashes vary on the cell width/cell number so add as many dashes as u need
            richTextBox1.Text = richTextBox1.Text + "\n";
        }

    }
}
}

VB.NET

 'use the same namespaces as c++(if required)

 'populate dgvw
 'add a button to transfer data from dgvw to richtxtbx

 Public sub Button1_click
                 For i As Integer = 0 To dgvw1.Rows.Count - 2
        RichTextBox1.Text = RichTextBox1.Text + "-"
        For j As Integer = 0 To dgvw1.Columns.Count - 1
        Try
            RichTextBox1.Text = RichTextBox1.Text + vbTab + dgvw1.Rows(i).Cells(j).Value.ToString() + vbTab
        Catch ex as exception
        End try  ' The try statement is used so that OBJECT REFERENCE NOT SET TO AN INSTANCE OF OBJECT error can be prevented as it happens when a cell value is null
            RichTextBox1.Text = RichTextBox1.Text + vbLf
            RichTextBox1.Text = RichTextBox1.Text + "----------------------------------------------------------------------------------------------------------"
            RichTextBox1.Text = RichTextBox1.Text + vbLf
        Next
    Next

End Sub

这可能不是完美的解决方案,但它可以完成工作,并且您可以进行任何您想要的更改......这就是我目前所做的,我会在发现新内容后立即更新

【问题讨论】:

  • 好像[String]、Prefix[String]、First name[String]等前面多了一个空格试试cell.Value.ToString().Trim()
  • 是否可以在某种表格中显示数据?还是像excel一样显示数据?
  • @djv。可以请Read my this post帮我吗

标签: excel vb.net richtextbox excel-interop


【解决方案1】:

这可能不是您问题的答案,但据我所知,如果您的任何单元格值为 null,那么您将在

中收到“对象引用未设置为对象实例”错误
   RichTextBox1.Text = RichTextBox1.Text + vbTab + dgvw1.Rows(i).Cells(j).Value.ToString() + vbTab

所以我建议你在这里使用 TRY STATEMENT...

【讨论】:

  • 好吧,我已经想通了..起初我无法理解问题是什么,但后来谷歌搜索了一段时间并自己修复了它......但无论如何谢谢。我会重新编辑我的帖子
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多