Excel에서 복사하고 CSV로 만드는 간단한 도구

9512 단어 .NETFrameworkC#.NET

요점



Excel 셀을 복사한 텍스트는 tsv이므로 Replace로 대체하고 csv에 저장하는 챌린지입니다.

경위



작업 효율성을 위해 Excel에서 CSV를 토하고 싶지만,
최근에는 보안 사정상 현장은 외부 네트워크에 연결되지 않고, VBA의 소스도 복사할 수 없는 경우도 많습니다.
그런데 곤란했지만, 어떻게 csv 파일을 만들까 생각했을 때, Excel로부터 셀을 카피했을 때의 특징을 이용하면 좋다고 알았습니다.

Excel에서 복사한 셀은 텍스트에서 tsv로 가지고 있으므로 구분 기호를 \t에서 ,로 바꾸면 됩니다.

완제품의 외관



적절하게 텍스트 상자를 배치
(※AcceptsEnter, AcceptsTab를 ON(true)으로 해 주세요)


셀 복사


붙여 넣으면 파일 경로가 나오므로 열면


순식간에 CSV 파일의 완성!


일반판과 원라이너판



일반 버전



CopyTsvToCsv_Normal.cs
string[] sepArr = new string[] { "\r\n" }; // Split用
string toCsv = content.Replace("\t", ","); // tsv→csvへ
string[] lines = toCsv.Split(sepArr, StringSplitOptions.RemoveEmptyEntries); // 行を分割
File.WriteAllLines(fi.FullName, lines); // 上の行を削除してFile.WriteAllText(fi.FullName, toCsv)でもOK

원라이너



CopyTsvToCsv_One-Liner.cs
File.WriteAllLines(fi.FullName, content.Replace("\t", ",").Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));

응용 플랜


  • 파일 경로, 디렉토리 경로에서 변환할 수 있도록 해도 OK
  • 나중에 쓴다


  • 출처



    이하, 상기의 정리입니다.

    CopyTsvToCsv.cs
    
            private void TxbInputTsv_TextChanged(object sender, TextChangedEventArgs e)
            {
                DateTime dtNow = DateTime.Now;
                string fileName = string.Format("out_{0}.csv", dtNow.ToString("yyyyMMddHHmmss"));
                FileInfo fi = new FileInfo(Path.Combine(di.FullName, fileName));
    
                if (fi.Exists) return;
    
                OutPutCsv(fi, ((TextBox)sender).Text);
            }
    
            private void OutPutCsv(FileInfo fi, string content)
            {
    
                if (string.IsNullOrEmpty(content.Trim())) return;
    
                try
                {
                    // ワンライナー版
                    // File.WriteAllLines(fi.FullName, content.Replace("\t", ",").Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));
    
                    string[] sepArr = new string[] { "\r\n" };
                    string toCsv = content.Replace("\t", ",");
                    string[] lines = toCsv.Split(sepArr, StringSplitOptions.RemoveEmptyEntries);
                    File.WriteAllLines(fi.FullName, lines);
    
                    TxbInputTsv.Text = string.Format("Save: {0}", fi.FullName);
                    Thread.Sleep(5000);
                    TxbInputTsv.Text = "";
                }
                catch(Exception ex)
                {
                    TxbInputTsv.Text = ex.ToString();
                }
            }
    

    좋은 웹페이지 즐겨찾기