在 C# 中使用 Excel Trim
Use Excel Trim in C#
有人可以帮我吗?我需要将 sheet 导入到 DataGridView,然后再导出到 Excel。但我希望在导入到 DataGridView 之前使用函数 TRIM。我的代码:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.InitialDirectory = "C:\Documents";
openFile.Filter = "Microsoft Excel |*.xls;*.xlsx;*.xls |All Files (*.*)|*.*|Text (*.csv)|*.csv";
if (openFile.ShowDialog() == DialogResult.OK)
{
txtFile.Text = openFile.FileName;
this.btnImp.Enabled = true;
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + openFile.FileName + ";" +
"Extended Properties=Excel 8.0;");
//HERE MY ASK
var excelApp = new Excel.Application();
excelApp.Range["A2:A460"].Formula = "=TRIM()";
OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Plan1$]", conn);
da.Fill(ds);
vGrade.DataSource = ds.Tables[0];
conn.Close();
}
}
下面的代码无效。我从未与 'Microsoft.Office.Interop.Excel'
合作过
//HERE MY ASK
var excelApp = new Excel.Application();
excelApp.Range["A2:A460"].Formula = "=TRIM()";
错误是:'System.Runtime.InteropServices.COMException' 类型的未处理异常发生在 SisE400.exe 附加信息:异常 HRESULT:0x800A03EC
我只想 TRIM "A2:A460" 从我的 sheet excell。我该怎么做?语法是什么?主题是什么?请帮助我。
您似乎在尝试使用 TRIM()
到 trim 值并将它们保存回原始位置。根据 excel 公式的工作方式,您需要使用 不同的 范围来存储 trimmed 值,并在该公式中引用原始单元格。类似于:
excelApp.Range["B2"].Formula = "=TRIM(A2)";
请注意 1) 这会将 trimmed 值放在不同的列中(覆盖那里的任何内容)和 2) 它适用于单个单元格 - 我不知道你可以应用公式到一个范围,它会自动复制。
一种更简单的方法可能是 trim C# 中的数据而不是使用 Excel 互操作:
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + openFile.FileName + ";" +
"Extended Properties=Excel 8.0;");
using(OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Plan1$]", conn))
{
da.Fill(ds);
}
foreach(DataRow dr in ds.Tables[0].Rows)
dr[0] = dr[0].ToString().Trim(); // trim the value in the first column and save it back
vGrade.DataSource = ds.Tables[0];
conn.Close();
试试这个...对我有用..
我创建了两列 "Col 1" 和 "Col 2"
private static void ReadExcel()
{
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=Z:\Codes\Test1.xls;" +
"Extended Properties=Excel 8.0;");
var excelApp = new Microsoft.Office.Interop.Excel.Application();
OleDbDataAdapter da = new OleDbDataAdapter("Select LTRIM(RTRIM([Col 1])) AS [Col 1],LTRIM(RTRIM([Col 2])) AS [Col 2] From [Plan1$]", conn);
da.Fill(ds);
// vGrade.DataSource = ds.Tables[0];
conn.Close();
}
有人可以帮我吗?我需要将 sheet 导入到 DataGridView,然后再导出到 Excel。但我希望在导入到 DataGridView 之前使用函数 TRIM。我的代码:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.InitialDirectory = "C:\Documents";
openFile.Filter = "Microsoft Excel |*.xls;*.xlsx;*.xls |All Files (*.*)|*.*|Text (*.csv)|*.csv";
if (openFile.ShowDialog() == DialogResult.OK)
{
txtFile.Text = openFile.FileName;
this.btnImp.Enabled = true;
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + openFile.FileName + ";" +
"Extended Properties=Excel 8.0;");
//HERE MY ASK
var excelApp = new Excel.Application();
excelApp.Range["A2:A460"].Formula = "=TRIM()";
OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Plan1$]", conn);
da.Fill(ds);
vGrade.DataSource = ds.Tables[0];
conn.Close();
}
}
下面的代码无效。我从未与 'Microsoft.Office.Interop.Excel'
合作过 //HERE MY ASK
var excelApp = new Excel.Application();
excelApp.Range["A2:A460"].Formula = "=TRIM()";
错误是:'System.Runtime.InteropServices.COMException' 类型的未处理异常发生在 SisE400.exe 附加信息:异常 HRESULT:0x800A03EC
我只想 TRIM "A2:A460" 从我的 sheet excell。我该怎么做?语法是什么?主题是什么?请帮助我。
您似乎在尝试使用 TRIM()
到 trim 值并将它们保存回原始位置。根据 excel 公式的工作方式,您需要使用 不同的 范围来存储 trimmed 值,并在该公式中引用原始单元格。类似于:
excelApp.Range["B2"].Formula = "=TRIM(A2)";
请注意 1) 这会将 trimmed 值放在不同的列中(覆盖那里的任何内容)和 2) 它适用于单个单元格 - 我不知道你可以应用公式到一个范围,它会自动复制。
一种更简单的方法可能是 trim C# 中的数据而不是使用 Excel 互操作:
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + openFile.FileName + ";" +
"Extended Properties=Excel 8.0;");
using(OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Plan1$]", conn))
{
da.Fill(ds);
}
foreach(DataRow dr in ds.Tables[0].Rows)
dr[0] = dr[0].ToString().Trim(); // trim the value in the first column and save it back
vGrade.DataSource = ds.Tables[0];
conn.Close();
试试这个...对我有用..
我创建了两列 "Col 1" 和 "Col 2"
private static void ReadExcel()
{
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=Z:\Codes\Test1.xls;" +
"Extended Properties=Excel 8.0;");
var excelApp = new Microsoft.Office.Interop.Excel.Application();
OleDbDataAdapter da = new OleDbDataAdapter("Select LTRIM(RTRIM([Col 1])) AS [Col 1],LTRIM(RTRIM([Col 2])) AS [Col 2] From [Plan1$]", conn);
da.Fill(ds);
// vGrade.DataSource = ds.Tables[0];
conn.Close();
}