【发布时间】: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