在 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();
    }