读书人

急新手EXCEL操作和创建文件夹有关问题

发布时间: 2013-07-11 15:38:46 作者: rapoo

急!新手求助EXCEL操作和创建文件夹问题,详见内容。
新手刚学编程碰到个问题不知怎么解决,具体是这样的:

现在有一个EXCEL表1,A列是地州名称,B列是区县名称,C列是乡镇名称,D列是村名。
另外有一个EXCEL表2,是已经设计好的表格,其中的A列留空。

1.首先需要根据表1的内容建立多级文件夹,在根目录下,第一级是地州文件夹,然后地州里包含区县,最后区县里包含乡镇。
2.在每一个乡镇文件夹中放入一个表2,要求A列中填入该乡镇所属的村名称。

以上。

我只会简单的读取EXCEL或者建个文件夹,关键是怎么根据表1的内容去判断和指定创建多级文件夹,还要提出一个乡镇对应的所有村名称,写入到另一个EXCEL的指定列中,这个实在是不会写。

事情紧急,身边也没有编程厉害的人指导,求各位帮帮忙!急新手EXCEL操作和创建文件夹有关问题,详见内容
[解决办法]
你应该会啊。

你首先会把Excel读取成DataTable吗?


#region 导入Excel数据相关函数

/// <summary>
/// 根据文件名获得Excel的工作薄名称
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static IList<string> GetExcelTablesName(string excelFileName)
{
using (OleDbConnection olbDbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + excelFileName + ";Extended Properties = \"Excel 8.0;HDR=YES;IMEX=1;\""))
{
try
{
olbDbConn.Open();
DataTable ExcelTableNames = olbDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
IList<string> tableList = new List<string>();


foreach (DataRow dr in ExcelTableNames.Rows)
{
tableList.Add((string)dr["TABLE_NAME"]);
}
return tableList;
}

catch (Exception ex)
{
return null;
}
finally
{
olbDbConn.Close();
olbDbConn.Dispose();
}
}
}

/// <summary>
/// 根据文件名、工作薄名称获得数据表
/// </summary>
/// <param name="excelFileName"></param>
/// <param name="tablesName"></param>
/// <returns></returns>
public static DataTable GetExcelDataTable(string excelFileName, string tablesName)
{
using (OleDbConnection olbDbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + excelFileName + ";Extended Properties = \"Excel 8.0;HDR=YES;IMEX=1;\""))


{
try
{
string sql = "SELECT * FROM [{0}]";

olbDbConn.Open();
OleDbDataAdapter da = new OleDbDataAdapter();
System.Data.DataSet ds = new System.Data.DataSet();
DataTable dtExcelData = null;
da.SelectCommand = new OleDbCommand(string.Format(sql, tablesName), olbDbConn);
da.Fill(ds, tablesName);
return ds.Tables[tablesName];
}

catch (Exception ex)
{
return null;
}
finally
{
olbDbConn.Close();
olbDbConn.Dispose();
}
}
}


public static void ResetColumnTypeByString(DataTable dt, string columnName)
{
string TempColumnName = "temp";
if (dt.Columns.Contains(columnName) && dt.Columns[columnName].DataType != Type.GetType("System.String"))
{
dt.Columns.Add(TempColumnName, Type.GetType("System.String"));
try
{
foreach (DataRow dr in dt.Rows)
{
dr[TempColumnName] = dr[columnName].ToString();
}
dt.Columns.Remove(columnName);
dt.Columns[TempColumnName].ColumnName = columnName;
}
catch (Exception ex)
{
dt.Columns.Remove(TempColumnName);
throw ex;
}
}
}
#endregion



上面是导入,然后对DataTable循环遍历
foreach(DataRow in dt.rows)
{
string str = string.empty;//临时存放文件夹路径


for(int i=0;i<dt.columns;i++)
{
str = str + dr[i].tostring();
按顺序取第i列,然后看有没有存在该文件夹
如果没有则新建
如果有则跳过
}
}

判断文件夹存在与否你应该会吧,建议文件夹呢?
[解决办法]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Excel = Microsoft.Office.Interop.Excel;
using System.Globalization;

using System.Windows.Forms;

namespace Print
{
public class ExcelExport
{
public static void saveOnExcel(String strPath, int StartFrequency, int EndFrequency, float FreqStep, double QualityFactor,
double Bandwidth, double ResonantFreq, double ResonantImped, double ResonantPhase,
double AntiFreq, double AntiImped, double AntiPhase)
{
System.Globalization.CultureInfo ciBack = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet.Cells[1, 1] = "开始";
xlWorkSheet.Cells[2, 1] = "停止";
xlWorkSheet.Cells[3, 1] = "间隔";



xlWorkSheet.Cells[5, 1] = "品质因素";
xlWorkSheet.Cells[6, 1] = "频带宽度";
xlWorkSheet.Cells[7, 1] = "谐振频率";
xlWorkSheet.Cells[8, 1] = "谐振阻抗";
xlWorkSheet.Cells[9, 1] = "谐振相位";
xlWorkSheet.Cells[10, 1] = "抗谐振频率";
xlWorkSheet.Cells[11, 1] = "抗谐振阻抗";
xlWorkSheet.Cells[12, 1] = "抗谐振相位";

xlWorkSheet.Cells[1, 3] = "" + StartFrequency;
xlWorkSheet.Cells[2, 3] = "" + EndFrequency;
xlWorkSheet.Cells[3, 3] = "" + FreqStep.ToString("#0.0");

xlWorkSheet.Cells[5, 3] = "" + QualityFactor.ToString("#0.0");
xlWorkSheet.Cells[6, 3] = "" + Bandwidth.ToString("#0.0");
xlWorkSheet.Cells[7, 3] = "" + ResonantFreq;
xlWorkSheet.Cells[8, 3] = "" + ResonantImped;
xlWorkSheet.Cells[9, 3] = "" + ResonantPhase.ToString("#0.0");
xlWorkSheet.Cells[10,3] = "" + AntiFreq;
xlWorkSheet.Cells[11,3] = "" + AntiImped;
xlWorkSheet.Cells[12,3] = "" + AntiPhase.ToString("#0.0");


xlWorkSheet.Cells[1, 5] = "kHz";
xlWorkSheet.Cells[2, 5] = "kHz";
xlWorkSheet.Cells[3, 5] = "kHz";



xlWorkSheet.Cells[5, 5] = "Q";
xlWorkSheet.Cells[6, 5] = "%";
xlWorkSheet.Cells[7, 5] = "kHz";
xlWorkSheet.Cells[8, 5] = "Ohm";
xlWorkSheet.Cells[9, 5] = "Deg";
xlWorkSheet.Cells[10, 5] = "kHz";
xlWorkSheet.Cells[11, 5] = "Ohm";
xlWorkSheet.Cells[12, 5] = "Deg";



xlWorkBook.SaveAs(strPath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);


System.Threading.Thread.CurrentThread.CurrentCulture = ciBack;

}
private static void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{


obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}

}
}
实话是本来不想给你代码的,不过算了,这个是完全码,自己去修改吧,如果不会我就不想说什么了。

读书人网 >C#

热点推荐