急!新手求助EXCEL操作和创建文件夹问题,详见内容。

flyingfatman 2013-07-02 08:21:28
新手刚学编程碰到个问题不知怎么解决,具体是这样的:

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

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

以上。

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

事情紧急,身边也没有编程厉害的人指导,求各位帮帮忙!
...全文
160 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumin940590725 2013-07-02
  • 打赏
  • 举报
回复
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(); } } } } 实话是本来不想给你代码的,不过算了,这个是完全码,自己去修改吧,如果不会我就不想说什么了。
yixian2007 2013-07-02
  • 打赏
  • 举报
回复
不要创建多级文件夹,一级一级建就好了,至于提出一个乡的所有村镇名称,有了DataTable之后,你可以用很多方法了,比如Select或者其它的
yixian2007 2013-07-02
  • 打赏
  • 举报
回复
你应该会啊。 你首先会把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列,然后看有没有存在该文件夹 如果没有则新建 如果有则跳过 } } 判断文件夹存在与否你应该会吧,建议文件夹呢?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧