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