|
|
|
|
using System.Data;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using Aspose.Cells;
|
|
|
|
|
|
|
|
|
|
namespace MergeMailExcel
|
|
|
|
|
{
|
|
|
|
|
public partial class Main : Form
|
|
|
|
|
{
|
|
|
|
|
public Main()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>EXCEL<45>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
readonly string _hzFileName = "<22><><EFBFBD>ܱ<EFBFBD>.xlsx";
|
|
|
|
|
|
|
|
|
|
private int fRow, fCol;
|
|
|
|
|
|
|
|
|
|
bool CheckFileName(string fileName)
|
|
|
|
|
{
|
|
|
|
|
if (fileName == _hzFileName) return true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
if (!fileName.StartsWith("<22><>")) return false;//<2F><>Ҫ<EFBFBD><D2AA>"<22><>"<22><>ͷ
|
|
|
|
|
if (fileName.IndexOf("<22><>") <= 0) return false;//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>"<22><>"
|
|
|
|
|
var ls = System.Text.RegularExpressions.Regex.Matches(fileName, "<22><>").Count;
|
|
|
|
|
var rs = System.Text.RegularExpressions.Regex.Matches(fileName, "<22><>").Count;
|
|
|
|
|
if (ls != 1 || rs != 1) return false;//<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string Getzm(int idx)
|
|
|
|
|
{
|
|
|
|
|
var dividend = idx;
|
|
|
|
|
var columnName = string.Empty;
|
|
|
|
|
|
|
|
|
|
while (dividend > 0)
|
|
|
|
|
{
|
|
|
|
|
var modulo = (dividend - 1) % 26;
|
|
|
|
|
columnName = Convert.ToChar(65 + modulo) + columnName;
|
|
|
|
|
dividend = (dividend - modulo) / 26;
|
|
|
|
|
}
|
|
|
|
|
return columnName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
fRow = 0; fCol=0;
|
|
|
|
|
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
|
|
|
|
|
folderBrowserDialog1.Description = "<22><>ѡ<EFBFBD><D1A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD>Excel<65><6C><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>";
|
|
|
|
|
folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;
|
|
|
|
|
folderBrowserDialog1.ShowNewFolderButton = false;
|
|
|
|
|
if (folderBrowserDialog1.ShowDialog() != DialogResult.OK) return;
|
|
|
|
|
var folderPath = folderBrowserDialog1.SelectedPath;
|
|
|
|
|
var files = Directory.GetFiles(folderPath);
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡExcel
|
|
|
|
|
var dt = new DataTable();
|
|
|
|
|
|
|
|
|
|
var flag = false;
|
|
|
|
|
var fileName = "";
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
foreach (var fileFullPath in files)
|
|
|
|
|
{
|
|
|
|
|
fileName = fileFullPath;
|
|
|
|
|
fileName = fileName.Substring(fileName.LastIndexOf("\\") + 1);
|
|
|
|
|
if (fileName == _hzFileName) continue;
|
|
|
|
|
|
|
|
|
|
if (!CheckFileName(fileName))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>Ҫ<D7BC><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>" + fileName, "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK,
|
|
|
|
|
MessageBoxIcon.Error);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (fileFullPath[(fileFullPath.LastIndexOf('.') + 1)..].ToLower() == "xlsx")
|
|
|
|
|
{
|
|
|
|
|
var wk = new Workbook(fileFullPath);
|
|
|
|
|
var ws = wk.Worksheets[0];
|
|
|
|
|
var rowsCnt = ws.Cells.MaxRow + 1;
|
|
|
|
|
var colCnt = ws.Cells.MaxColumn + 1;
|
|
|
|
|
|
|
|
|
|
if (rowsCnt != 3 && rowsCnt != 4)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>е<EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>" + fileName + "<22><>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (fRow == 0) fRow = rowsCnt;
|
|
|
|
|
if (fCol == 0) fCol = colCnt;
|
|
|
|
|
|
|
|
|
|
if (rowsCnt != fRow || colCnt != fCol)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>" + fileName + "<22><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+fRow+",<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>:"+rowsCnt+",<2C><>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+fCol+",<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+colCnt, "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dt2 = ws.Cells.ExportDataTable(0, 0, rowsCnt, colCnt);
|
|
|
|
|
|
|
|
|
|
if (!flag)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>DataTable<6C>ṹ
|
|
|
|
|
for (var i = 0; i < dt2.Columns.Count; i++) dt.Columns.Add(i.ToString());
|
|
|
|
|
flag = true;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӽ<EFBFBD>ȥ
|
|
|
|
|
dt.Rows.Add(dt2.Rows[fRow - 1].ItemArray);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (files.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
var hzFile = folderPath + "\\" + _hzFileName;
|
|
|
|
|
File.Copy(files[0], hzFile, true);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var wk = new Workbook(hzFile);
|
|
|
|
|
var ws = wk.Worksheets[0];
|
|
|
|
|
var startRowCnt = ws.Cells.MaxRow + 1;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
var style = wk.Styles[wk.Styles.Add()];
|
|
|
|
|
style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>
|
|
|
|
|
style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20>ұ߽<D2B1><DFBD><EFBFBD>
|
|
|
|
|
style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20>ϱ߽<CFB1><DFBD><EFBFBD>
|
|
|
|
|
style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //Ӧ<>ñ߽<C3B1><DFBD><EFBFBD> <20>±߽<C2B1><DFBD><EFBFBD>
|
|
|
|
|
style.HorizontalAlignment = TextAlignmentType.Center; //<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD>뷽ʽ<EBB7BD><CABD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
|
|
|
|
|
style.VerticalAlignment = TextAlignmentType.Center;
|
|
|
|
|
style.Font.Name = "<22><><EFBFBD><EFBFBD>"; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
style.Font.Size = 11; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < dt.Rows.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
for (var j = 0; j < dt.Columns.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
if (j == 0) ws.Cells[i + fRow - 1, j].PutValue(dt.Rows[i][j].ToString());
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double v;
|
|
|
|
|
double.TryParse(dt.Rows[i][j].ToString(), out v);
|
|
|
|
|
ws.Cells[i + fRow - 1, j].PutValue(v);
|
|
|
|
|
}
|
|
|
|
|
ws.Cells[i + fRow - 1, j].SetStyle(style); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> SUM<55><4D><EFBFBD><EFBFBD>
|
|
|
|
|
var rowsCnt = ws.Cells.MaxRow + 1;
|
|
|
|
|
var colCnt = ws.Cells.MaxColumn;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
style.ForegroundColor = Color.LightSkyBlue;
|
|
|
|
|
style.Pattern = BackgroundType.Solid;
|
|
|
|
|
style.Font.IsBold = true;
|
|
|
|
|
|
|
|
|
|
ws.Cells[rowsCnt, 0].PutValue("<22>ܼ<EFBFBD>");
|
|
|
|
|
ws.Cells[rowsCnt, 0].SetStyle(style); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
|
|
|
|
|
for (var i = 1; i <= colCnt; i++)
|
|
|
|
|
{
|
|
|
|
|
var zm = Getzm(i + 1);
|
|
|
|
|
ws.Cells[rowsCnt, i].Formula = "=sum(" + zm + startRowCnt+":" + zm + rowsCnt + ")";
|
|
|
|
|
ws.Cells[rowsCnt, i].SetStyle(style); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
}
|
|
|
|
|
wk.Save(hzFile); //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
MessageBox.Show("<22><>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>", "<22>ɹ<EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
|
|
|
|
|
|
|
Process.Start("rundll32.exe", "shell32,OpenAs_RunDLL "+ hzFile);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>Ժϲ<D4BA><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> <20><>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (IOException ioErr)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("<22>Dz<EFBFBD><C7B2><EFBFBD>Ŀ¼<C4BF>µ<EFBFBD>Excel<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>У<EFBFBD>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
}
|
|
|
|
|
catch (CellsException ce)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(fileName + "<22><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>", "<22><><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|