Sheet1.Range("A1") = "题名"
    Sheet1.Range("B1") = "作者"
    Sheet1.Range("C1") = "机构"
    Sheet1.Range("D1") = "期刊名"
    Sheet1.Range("E1") = "年份"
    Sheet1.Range("F1") = "期号"
    Sheet1.Range("G1") = "页码"
    Sheet1.Range("H1") = "issn"
    Sheet1.Range("I1") = "cn"
    Sheet1.Range("J1") = "馆藏号"
    Sheet1.Range("K1") = "关键字1"
    Sheet1.Range("L1") = "关键字2"
    Sheet1.Range("M1") = "关键字3"
    Sheet1.Range("N1") = "关键字4"
    Sheet1.Range("O1") = "关键字5"
    Sheet1.Range("P1") = "关键字6"
    Sheet1.Range("Q1") = "关键字7"
    Sheet1.Range("R1") = "关键字8"
    Sheet1.Range("S1") = "关键字9"
    Sheet1.Range("T1") = "关键字10"
    Sheet1.Range("U1") = "关键字11"
    Sheet1.Range("V1") = "关键字12"
    Sheet1.Range("W1") = "分类号"
    Sheet1.Range("X1") = "文摘"
     
    For sRow = 1 To vLen
          If Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【题 名】" Then
            vRow = vRow + 1
            Sheet1.Range("A" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【作 者】" Then
            Sheet1.Range("B" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【机 构】" Then
            Sheet1.Range("C" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【刊 名】" Then
            Sheet1.Range("D" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 7) = "【ISSN号】" Then
            Sheet1.Range("H" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 8)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 7) = "【C N 号】" Then
            Sheet1.Range("I" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 8)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【馆藏号】" Then
            Sheet1.Range("J" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【关键词】" Then
            Sheet1.Range("K" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【分类号】" Then
            Sheet1.Range("W" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【文 摘】" Then
            Sheet1.Range("X" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
        End If
    Next sRow
    For vRow = 2 To vLen
     sTemp = Sheet1.Cells(vRow, 4)
     For j = 4 To 20
     iFind = InStr(1, sTemp, qk)
     If iFind > 0 Then
     
     Sheet1.Cells(vRow, j) = Mid(sTemp, 1, iFind - 1)
     sTemp = Mid(sTemp, iFind + 1)
          
     Else
     Sheet1.Cells(vRow, j) = sTemp
     Exit For
     End If
     
     Next
    Next

解决方案 »

  1.   

      以上是一个excel的vba代码,我想问的是怎么转换成c#里可操作运行的代码,比如弄一个c#程序打开一个excel文件,然后加载上面那个代码,达到分列效果。
      

  2.   

            public static  bool ReadExcelFile(string fileName, out DataTable dt, out string errMessage)
            {
                errMessage = "";            if (!System.IO.File.Exists(fileName))
                {
                    errMessage = "file doesn't exist.";
                    return false;
                }            Excel.Application xlApp;
                Excel.Workbook xlWkb;
                Excel.Worksheet xlSht;            xlApp = new Excel.ApplicationClass();
                xlApp.DisplayAlerts = false;            try
                {
                    xlWkb = xlApp.Workbooks.Open(fileName);
                    xlSht = xlWkb.Sheets[0];
                }
                catch (System.Runtime.InteropServices.COMException cex)
                {
                    errMessage = cex.Message;
                    xlSht = null;
                    xlApp.Quit();
                    xlWkb = null;
                    xlApp = null;
                    return false;
                }
                catch (Exception ex)
                {
                    errMessage = ex.Message;
                    xlSht = null;
                    xlApp.Quit();
                    xlWkb = null;
                    xlApp = null;
                    return false;
                }
                //打开完毕, 开始读数据填充dt
                int rowCnt, clmCnt;
                rowCnt = xlSht.UsedRange.Rows.Count;
                clmCnt = xlSht.UsedRange.Columns.Count;            dt = new DataTable();
                DataRow dr;
                DataColumn dc;            for (int i = 0; i < clmCnt; i++)
                {
                    dc = new DataColumn();
                    dt.Columns.Add(dc);
                }            for (int i = 1; i <= rowCnt; i++)
                {
                    dr = dt.NewRow();                dr.BeginEdit();
                    for (int j = 1; j <= clmCnt; j++)
                        dr[j - 1] = xlSht.Cells[i, j].value;
                    dr.EndEdit();
                    dt.Rows.Add(dr);
                }            //数据读取完毕, 关闭文件退出
                xlSht = null;
                xlWkb.Close();
                xlApp.Quit();
                xlWkb = null;
                xlApp = null;            return true;        }        public static bool WriteToExcelFile(string fileName, bool overWriteExists, out DataTable dt, out string errMessage)
            {
                if (!System.IO.File.Exists(fileName))
                {
                    if (overWriteExists)
                    {
                        try
                        {
                            System.IO.File.Delete(fileName);
                        }
                        catch (Exception ex)
                        {
                            errMessage = "can't update exists file.";
                            errMessage += ":  " + ex.Message;
                            return false;
                        }
                    }
                    else
                    {
                        errMessage = "specified file already exists.";
                        return false;
                    }
                } // end if            Excel.Application xlApp;
                Excel.Workbook xlWkb;
                Excel.Worksheet xlSht;            xlApp = new Excel.ApplicationClass();
                xlWkb = xlApp.Workbooks.Add();
                xlSht = xlWkb.Sheets[0];            for (int i = 1; i <= dt.Rows.Count; i++)
                    for (int j = 1; j <= dt.Columns.Count; j++)
                        xlSht.Cells[i, j].value = dt.Rows[i - 1][j - 1].ToString();
                xlSht = null;
                xlWkb.Close();
                xlApp.Quit();
                xlWkb = null;
                xlApp = null;            return true;        
            }// end function writeexcel
      

  3.   

    这两个函数是通用的操作excel 的函数, 不需修改就可以直接用的. 
    至于你控制各列的细节, 看一下智能感知就知道了, 方法和属性的名称也基本上跟vba 里一样.
    我就不再给你写其它的细节代码了. 
      

  4.   

    谢谢,我晚上回去调试下。
    如果能解决马上结贴,如果小第不才,希望Moosdau能给点 细节,嘿嘿
      

  5.   

    我还是改不出,谁能否给个完全修改好的代码,差不多细节代码也行
    我的数据出来过程是打开一个 excel文件,然后从sheet1的数据通过以上代码处理放到shee2里.
    不吃晚饭等待高手中
      

  6.   

    楼主可通过C#的程序调用Excel对象的Run方法执行相关vba,这样也许比你把vba转成C#代码,可行性更高一些.我们的经验,很多代码不好实现,而Excel里用vba很好实现的功能,都是通过在excel里录制宏,然后在c#里执行的方式实现.Excel.dll是托管对象,所以它的有些功能,是很难一步到位转成C#语句的,但Run方法却是调用vba的接口。
    objExcel.Run("Macro1", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 这里的objExcel是你实例化的:Excel.Application