解决方案 »

  1.   

    你把VBA发给大家帮你翻译下吧。其实代码都差不多的,C#也是调用EXCEL COM对象
      

  2.   

    Sub 替换()Dim VCell As Range
    Dim i As Integer
    Dim j As IntegerFor i = 1 To 1000
    Set VCell = Sheet1.Cells(i, 1)
    For j = 1 To 12
    If VCell.Characters(j, 1).Font.Bold = True Then
    Select Case VCell.Characters(j, 1).Text
    Case "0"
    VCell.Characters(j, 1).Text = "("
    Case "1"
    VCell.Characters(j, 1).Text = "!"
    Case "2"
    VCell.Characters(j, 1).Text = "@"
    Case "3"
    VCell.Characters(j, 1).Text = "#"
    Case "4"
    VCell.Characters(j, 1).Text = "$"
    Case "5"
    VCell.Characters(j, 1).Text = "%"
    Case "6"
    VCell.Characters(j, 1).Text = "^"
    Case "7"
    VCell.Characters(j, 1).Text = "&"
    Case "8"
    VCell.Characters(j, 1).Text = "*"
    Case "9"
    VCell.Characters(j, 1).Text = "("
    End Select
    End If
    Next j
    Next iEnd Sub
    这是VBA 大致的一个代码!!提供参考!!
      

  3.   

                Excel._Worksheet worksheetData = (Excel._Worksheet)workbookData.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                worksheetData.Cells[1, 1]=worksheetData.Cells[1, 1].ToString().Replace('0','('));
      

  4.   

    VS2010  读取excel文件的大部分是通过DataSet,这样再次取出的数据没有了原来在Excel里的字体样式了。所以这种方法可以排除。使用COM组件应该可以。
      

  5.   

    看看对你有木有帮助吧 /// <summary>
            /// 导入方法
            /// </summary>
            /// <param name="fileName">导入文件地址</param>
            /// <param name="fileName">读取Excel第几页</param>
            private DataTable ReadFile(string filePath, int page)
            {
                try
                {
                    string filename = filePath;
                    filename = filename.Substring(filename.LastIndexOf("\\") + 1);//截取文件的名字
                    string filetype = filePath.Substring(filePath.LastIndexOf(".") + 1);//截取文件的类型                //string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES\"";//office2007
                    string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;IMEX=1'";///office2003
                    System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
                    Conn.Open();                System.Data.DataTable schemaTable = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                    string tableName = schemaTable.Rows[page - 1][2].ToString().Trim();                string strCom = "SELECT * FROM [" + tableName + "]";
                    System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
                    DataSet ds = new DataSet();
                    try
                    {
                        myCommand.Fill(ds, "TableName");
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Execl表格名称错误,导入失败,请把导入的Execl卡片名写成系统默认的\"sheet1\"!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None);
                        return null;
                    }
                    Conn.Close();
                    //这里加循环判断把你该需要替换的都替换了,然后再存到一个DataTable里该怎么处理就怎么处理
                   DataTable dt=new DataTable();
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                    //..................................处理....
                    }
                    return dt;    //返回dataset
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return null;
                }
            }
      

  6.   


    public void 替换()
    {
    Excel.Application xlApp ;
    Excel.Workbook xlWorkBook ;
    Excel.Worksheet xlWorkSheet ;
    object misValue = System.Reflection.Missing.Value;
    Excel.Range range;

    xlApp = new Excel.ApplicationClass();
    xlWorkBook = xlApp.Workbooks.Add(misValue);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

    for (int i = 0; i < 1000; ++i)
    {
    range = (Excel.Range)xlWorkSheet.Cells[i, 1];
    int TextLength = range.Text.ToString().Length;
    for (int CharCount = 1; CharCount <= TextLength; ++CharCount)
    {
    Excel.Characters charToTest = range.get_Characters(CharCount, 1);
    bool IsBold = (bool)charToTest.Font.Bold;

    if (IsBold == true)
    {
    switch (charToTest.Text)
    {
    case "0":
    charToTest.Text = "(";
    break;
    case "1":
    charToTest.Text = "!";
    break;
    case "2":
    charToTest.Text = "@";
    break;
    case "3":
    charToTest.Text = "#";
    break;
    case "4":
    charToTest.Text = "$";
    break;
    case "5":
    charToTest.Text = "%";
    break;
    case "6":
    charToTest.Text = "^";
    break;
    case "7":
    charToTest.Text = "&";
    break;
    case "8":
    charToTest.Text = "*";
    break;
    case "9":
    charToTest.Text = "(";
    break;
    default:
    break;
    }
    }
    // other formatting tests here
    }
    }
    }
      

  7.   

    方法一:NPOI  
     NPOI参考
    优点:NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。操作步骤:一、下载NPOI:http://down.gougou.com/down?cid=DAEA322D9D7F934B898077FB01C3A8CB02A746E6二、项目添加引用;三、首先把如下代码封装成一个ExcelHelper类;四、调用方法。 代码:(经测试)    /// <summary>    
        /// 由Excel导入DataSet,如果有多个工作表,则导入多个DataTable    
        /// </summary>    
        /// <param name="excelFileStream">Excel文件流</param>    
        /// <param name="headerRowIndex">Excel表头行索引</param>    
        /// <returns>DataSet</returns>    
        public static DataSet ImportDataSetFromExcel(Stream excelFileStream, string sheetName, int headerRowIndex)
        {
            
            DataSet ds = new DataSet();
            HSSFWorkbook workbook = new HSSFWorkbook(excelFileStream);
            string sheetname = null;
            HSSFSheet sheet = null;
           
            try
            {
                sheetname = sheetName.Substring(0, sheetName.Length - 1);
                sheet = workbook.GetSheet(sheetname);//"BlankSubtraction1"            if (sheet != null)
                {                DataTable table = new DataTable();
                    HSSFRow headerRow = sheet.GetRow(headerRowIndex);
                    int cellCount = headerRow.LastCellNum;
                    for (int i = headerRow.FirstCellNum; i < 20; i++)
                    {
                        //string tst1 = headerRow.GetCell(1).ToString();
                        //string tst2 = headerRow.GetCell(1).StringCellValue.Trim();                    if (headerRow.GetCell(i) != null)
                        {
                            //// 如果遇到第一个空列,则不再继续向后读取                    
                            //cellCount = i + 1;
                            //break;
                            DataColumn column = new DataColumn(i.ToString());
                            table.Columns.Add(column);
                        }
                        //DataColumn column = new DataColumn(i.ToString());//headerRow.GetCell(i).StringCellValue
                        //table.Columns.Add(column);
                    }
                    for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                    {
                        HSSFRow row = sheet.GetRow(i);
                        if (row != null)
                        {
                            DataRow dataRow = table.NewRow();                        cellCount = row.Cells.Count;                        for (int j = row.FirstCellNum; j < 15; j++)
                            {
                                if (row.GetCell(j) != null)//row.GetCell(j) != null
                                {
                                    string tst = row.GetCell(j).ToString();
                                    dataRow[j] = row.GetCell(j).ToString();
                                }
                            }
                            table.Rows.Add(dataRow);
                        }
                    }
                    ds.Tables.Add(table);
                }            
            }
            catch
            {
     
            }
            excelFileStream.Close();
            workbook = null; 
            return ds;
        }
        /// <summary>    
        /// 由Excel导入DataSet,如果有多个工作表,则导入多个DataTable    
        /// </summary>    /// <param name="excelFilePath">Excel文件路径,为物理路径。</param>   
        /// <param name="headerRowIndex">Excel表头行索引</param>    
        /// <returns>DataSet</returns>    
        public DataSet ImportDataSetFromExcel(string excelFilePath, string sheetName, int headerRowIndex)
        {
            using (FileStream stream = System.IO.File.OpenRead(excelFilePath))
            {
                long tt = stream.Length;
                //while (stream.Length() != null)
                int ss = stream.ReadByte();            return ImportDataSetFromExcel(stream, sheetName, headerRowIndex);
            }
        }
      

  8.   

    还有其他的方法  去看看这里吧!  http://blog.csdn.net/jyz123456/article/details/7966772