首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

100分vba转换成c#可操作代码,路过的都进来捧个场,多谢多谢 !·

2012-01-31 
100分紧急求助vba转换成c#可操作代码,路过的都进来捧个场,谢谢谢谢 !Sheet1.Range(A1) 题名Sheet1.R

100分紧急求助vba转换成c#可操作代码,路过的都进来捧个场,谢谢谢谢 !·
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

[解决办法]
可惜不会VB
[解决办法]
进来看看
[解决办法]
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


[解决办法]
这两个函数是通用的操作excel 的函数, 不需修改就可以直接用的. 
至于你控制各列的细节, 看一下智能感知就知道了, 方法和属性的名称也基本上跟vba 里一样.
我就不再给你写其它的细节代码了.
[解决办法]
楼主可通过C#的程序调用Excel对象的Run方法执行相关vba,这样也许比你把vba转成C#代码,可行性更高一些.我们的经验,很多代码不好实现,而Excel里用vba很好实现的功能,都是通过在excel里录制宏,然后在c#里执行的方式实现.Excel.dll是托管对象,所以它的有些功能,是很难一步到位转成C#语句的,但Run方法却是调用vba的接口。

C# code
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);
[解决办法]
4楼的朋友说的很不错,顶一个
[解决办法]
我快没有分了,楼主给小弟多加点分,谢谢
[解决办法]
学习一下

热点排行